Složení dotazu LEFT JOIN s AND

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

Zdravím všechny.

Řeším aktuálně jeden problém. Nedaří se mi do Nette\Database poskládat následující dotaz:

SELECT `item.*
FROM item
LEFT JOIN bid ON item.id = bid.item AND bid.user = ?
WHERE (item.start <= ? AND item.end >= ?)
ORDER BY bid.amount DESC`

Konkrétně mi nejvíc dělá problém dostat za LEFT JOIN příkaz:

AND `bid.user = ?`

Za každou radu budu vážně vděčný.

froggy
Člen | 17
+
0
-

Část AND `bid.user = ?` patří až do WHERE části.

Tedy takto: WHERE bid.user = ? AND (item.start <= ? AND item.end >= ?)

Patrikkk
Člen | 9
+
0
-

froggy napsal(a):

Část AND `bid.user = ?` patří až do WHERE části.

Tedy takto: WHERE bid.user = ? AND (item.start <= ? AND item.end >= ?)

Zde si dovolím oponovat. V případě, že to přesunu do WHERE části tak se změní výsledek.

Já potřebuji získat všechny položky item, i ty, ke kterým nepatří žádná položka bid s podmínkou bid.user = ?

Problém jsem popisoval zde: "":http://diskuse.jakpsatweb.cz/?…

froggy
Člen | 17
+
0
-

V tom případě by ta podmínka, pokud se nepletu, měla být AND (bid.user = ? OR bid.user IS NULL). Pomůže to?

vvoody
Člen | 910
+
0
-

Bohužiaľ nie je možné doplniť podmienku za JOIN-om, aj mne to veľa krát chýbalo. Dosť sa to skomplikuje keď to chceš dopodmienkovať vo WHERE. Možné riešenie je si vytvoriť view.

Milo
Nette Core | 1283
+
0
-

Lze to přesunout do where jako:

WHERE COALESCE(bid.user = ?, TRUE)
h4kuna
Backer | 740
+
0
-

pokud nechceš vytvářet view, tak pak zbývá API – query()