1 (edited by Linetas 2010-12-15 00:48:59)

Topic: problema su SELECT

Sveiki, turiu menka problemele ;) esme tokia: yra paieskos kriteriju forma: salis, metai, metalo tipas ir t.t kai naudoju SELECT istraukti duomenims pagal 1 kriteriju (tarkim pagal pagaminimo metus ar kilmes sali) man puikiausiai istraukia duomenis ir juos atvaizduoja, bet kai bandau prijungti ir antra kriteriju tai man nieko neberodo, bet klaidos neismeta, idomiai. prasau pagelbeti :)


<?php 
include 'config.php';

$db_name = "monetos";
                        
$salis = htmlspecialchars($_GET['salis']);
$metai = htmlspecialchars($_GET['metai']);
$metalas = htmlspecialchars($_GET['metalas']);

$sql = "SELECT * FROM `katalogas` WHERE salis=\"$salis\" [b]AND[/b] metai=\"$metai\" ";
$rodymas = mysql_query($sql);
                           
?>
<br />
<?php 

while ($row = mysql_fetch_array($rodymas, MYSQL_BOTH)) {
   printf ("<table width=\"200\" border=\"5\" cellspacing=\"2\" cellpadding=\"2\" summary=\"sdsvdvrefvd\">
   <caption align=\"top\">%s</caption>
  <tr>
  <th scope=\"col\">Pavadinimas:</th>
  </tr>
  </table>", $row[0], $row["pavadinimas"], $row["aprasymas"], $row["picture"]);
}

mysql_free_result($rodymas);   

?>

rodo kai be AND, o su AND neberodo nieko. kame beda ?

Re: problema su SELECT

Tu net netikrini ar yra klaida ar ne... taip pat išsivesk echo $sql;, gal ką pamatysi (tarkime, kad ieškai pagal tokiu kriterijus, pagal kuriuos eilučių tikrai nėra)

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: problema su SELECT

Taip, klaidos pas tave gali būti nukreiptos į log'ą ar visai atjungtos, todėl privalai visada apdoroti klaidas - t.y. tikrinti ar SQL užklausa pavyko ar ne, kiek gavosi rezultatų, ir tik jeigu viskas ok tik tada atvaizduoti tuos rezultatus. Pabandyk http://www.php.net/manual/en prie MySQL funkcijų paieškoti, kaip tuos dalykus patikrinti.

Re: problema su SELECT

aciu, pasitvarkiau, tik esme, kad jei nors vieno kriterijaus paieskoj nepasirenki tai mysql grazina reiksme 0. Kaip padaryti jei pvz i kriterijus nepasirinktas, kintamasis gauna tuscia reiksme ir gaunasi tarkim taip jei metai nepasitinkti SELECT * FROM lentele WHERE metai="" AND salis="Lietuva" ANDmetalas="AG" . ir jei sintakseje yra tuscias nurodymas, automatiskai neveikia niekas... Tai kaip padaryti ,kad jei pasirinktas tuscias, o mysql praleistu ta vieta, tarkim metai, arba ieskotu visko. gal yra kokia komanda ar kas? ;/

Re: problema su SELECT

Na tai programuok, kad užklausa būtų formuojama pagal kriterijus. Jeigu nėra kažkokio kriterijaus, tai užklausoje aplamai išmesk to kriterijaus tikrinimą.

Re: problema su SELECT

Su php gali suprogramuoti salygas kad jeigu kriterijus visiskai neparinktas tai daro viena SQL uzklausos dali o jeigu parinktas tada daro kita (jau pagal ta parinkta kriteriju).

$xxx = 0

if (neparinktas kriterijus) 
{
$xxx = -1
}

SELECT * FROM table WHERE ($xxx = -1 OR Metalas = "AG")

Jeigu if salyga teisinga, tada SQL uzklausos WHERE dalyje bus vykdoma pirma dalis (nes -1 = -1, kas reiskia kad nefiltruos nieko) o jeigu if salyga neteisinga (kriterijus parinktas) tada SQL uzklausos pirma dalis bus FALSE ir bus vykdoma antra dalis t.y. filtravimas.