Jak vybrat z tabulky řádky ke kterým neexistuje záznam v závislé tabulce

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

Ahoj,
prosím vás nějak si lámu hlavu nad dotazem:
Mám dvě tabulky
1)

Order

Name
Price
end_date

2)

Bill

Id
order_id
Name

Rád bych vytáhl z tabulky Selection, který bude odpovídat následujícím podmínkám end_date bude starší než „dnešek“ a nebude existovat záznam v tabulce bill. Prosím jak toho lze docílit? Pomůže někdo ? :)

Díky,
Adam

nanuqcz
Člen | 822
+
+2
-

Ahoj,
vezmu to postupně:

1) end_date bude starší než „dnešek“

$db->table('order')->where('end_date < NOW()');

2) nebude existovat záznam v tabulce bill

K tomuhle slouží v MySQL příkaz HAVING, který se používá spolu s GROUP BY. Tedy v NDBT:

$db->table('order')->group('order.id')->having('COUNT(:bill.id) = 0');

Takže celý dotaz:

$db->table('order')
	->where('end_date < NOW()')
	->group('order.id')
	->having('COUNT(:bill.id) = 0');

…netestováno, ale v principu by mělo být OK.

Editoval nanuqcz (3. 8. 2014 21:34)

adioverride
Člen | 26
+
0
-

Díky, jede to jak má.