mysql query

mysql_query("SELECT naslov FROM urejevalnik WHERE id='$rw[id]' AND jezik='$jezik' ");

tko ven dobim naslov zadeve. Zanima me kako bi naredil, da če jezik ni dodan, enostavno tega ne upošteva, oz kot da bi bilo tako

mysql_query("SELECT naslov FROM urejevalnik WHERE id='$rw[id]'");

Poskusil sem z:

mysql_query("SELECT naslov FROM urejevalnik WHERE ((id='$rw[id]' AND jezik='$jezik') OR (id='$rw[id]'))");

hvala

9 odgovorov

mogoče:
mysql_query("SELECT naslov FROM urejevalnik WHERE id='$rw[id]' AND (jezik='$jezik' OR jezik IS NULL)");

Morda

if(isset($_POST['language'])) {
    mysql_query("SELECT naslov FROM urejevalnik WHERE id='$rw[id]' AND jezik='$jezik' ");
} else {
    mysql_query("SELECT naslov FROM urejevalnik WHERE id='$rw[id]'");
}

@Dejan upošteva mi samo jezik, ne upošteva če je jezik prazen oz. če sploh ni tega vnosa.

Gogy ja tako sem tudi jaz uredil zaenkrat, samo to je potem vedno toliko vrstic in bi raje videl da bi rešil v 1

mysql_query("SELECT naslov FROM urejevalnik WHERE id='$rw[id]'".(isset($_POST['language']) ? " AND jezik='$jezik' ") : '');

?

V praksi pa se bolj obnese query building v smislu

$sql = "SELECT naslov FROM urejevalnik WHERE id='$rw[id]'";
if(isset($_POST['language']))
{
   $sql .= " AND jezik='$jezik' ";
}

Ker je lažje spreminjati, dograjevati, dokumentirati...

BTW. Index mora biti v navednicah, pa še v {} ovij spremenljivke (vsaj te, ki so sestavljene)
narobe: WHERE id='$rw[id]'
pravilno WHERE id='{$rw['id']}'

3

hvala SlimDeluxe, rešil po tvoje ;)

SlimDeluxe:
BTW. Index mora biti v navednicah, pa še v {} ovij spremenljivke (vsaj te, ki so sestavljene)
narobe: WHERE id='$rw[id]'
pravilno WHERE id='{$rw['id']}'

zakaj pa to če smem vprašat? :) ni tako da če je stolpec int da je brez '', za {} pa še res nisem slišal. Lahko malo razložiš?

lahko imaš
... WHERE id=' ". $rw['id'] ." ' ORDER BY ...
ali pa
... WHERE id=' { $rw['id'] } ' ORDER BY ...

Enojni narekovaji se uporabljajo, če imaš v WHERE id = '<string>', načeloma za INTEGER-je (cela števila) ni potrebno imeti.

Presledki in ORDER BY je dodan samo zaradi boljše preglednosti.
V prvem načinu z dvojnimi narekovaji zaključimo (zaključimo s tistimi narekovaji, s katerimi smo niz začeli: mysql_query("SELECT naslov) niz in zraven "prilepimo" spremenljivko $rw.
V drugem pa jo vključimo z zaviti oklepaji. Kateri način uporabljaš je načeloma vseeno.

Razlika je tudi v prikazu v urejevalniku - Notepad++ - kateri ti obarva $rw['id'] kot, da je spremenljivka v PHPju, v drugem pa ti samo bold-a. Spet je seveda odvisno od urejevalnika do urejevalnika.

Govoril sem o indexu celice, ki jo uporabljaš, torej
$rw[id] <- narobe
$rw['id'] <- pravilno
Sicer tudi $rw[id] bo načeloma delal, vendar bo vrgel E_WARNING in ti naredil uslugo, saj se mu svita, kaj si želel narediti.
{ } oklepaji se uporabljajo v določenih primerih, ko želiš narediti nekaj kompleksnega, kar sicer v php stringu ne bi evauliralo kot spremenljivka, npr.

$string = "my daddy has {$daddy->horseCount()} horses";

Nekateri (tudi sam kdaj pa kdaj) za boljšo berljivost uporabljajo to večkrat, tudi pri enostavnih primerih:

$string = "my daddy has {$horse_count} horses";

Več o tem (curly braces) najdeš v manualu pod string:
http://www.php.net/manual/en/language.types.string.php

ah par stvari sem čisto spregledal. hvala vseeno za razlago.