SQL, if null, úprava SQL dotazu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
sniper1101
Člen | 21
+
0
-

Dobrý deň. Prosím vás potreboval by som poradiť s mojim SQL.

Ide o to, že mám nejaké premenne ($what, $year, $datum_dorucenia = NULL, $datum_zverejnenia = NULL, $suma = NULL) kde niektoré sú defaultne null a môžete im priradiť hodnotu a potom v sql výbere zohľadniť, že pokiaľ sú neni null tak vo where porovná nejaký stĺpec s tou hodnotou. Skúšal som to cez ifnull hocičo ale nejak som sa nevymotal.

Ide o to, že $what a $year sa zadáva vždy a $what hľadám naprieč niektorými stlpcami ako fulltext a $year zohľadňujem cez =. Avšak môže sa zadať aj datum_dorucenia, datum_zverejnenia a suma. A tie treba porovnávať. Nejaké návrhy niekto ako by to bolo najlepšie spraviť? Prikladám moje sql ale je to nefunkčné.

$datum_dorucenia = (!is_null($datum_dorucenia) ? date_format($datum_dorucenia, 'Y-m-d') : "");
$datum_zverejnenia = (!is_null($datum_zverejnenia) ? date_format($datum_zverejnenia, 'Y-m-d') : "");

$this->database->fetchAll("select * FROM tabulka WHERE MATCH (cislo_faktury_interne, anotacia, cislo_zmluvy, cislo_objednavky, dodavatel, dodavatel_adresa, dodavatel_ico) AGAINST(? IN BOOLEAN MODE) AND year(datum_zverejnenia) = ? AND suma_celkom LIKE ? AND DATE(d_dorucenia) = ? AND DATE(datum_zverejnenia) = ?", "*".$what."*", $year, '%'.$suma.'%', $datum_dorucenia, $datum_zverejnenia);

Ďakujem všetkým.

Editoval sniper1101 (16. 7. 2015 15:01)

Felix
Nette Core | 1247
+
0
-

Nemohl by jsi pouzit skladane fluent dotazy? Viz

$sql = $db->table('tabulka');

if ($what) $sql->where('...', $what);
if ($elseWhat) $sql->where('...', $elseWhat);