Podmínka v joinu (AND) nette database

Kakaku
Člen | 27
+
0
-

Zdravím, mám tabulku zákazníků a k nim v tabulce obraty přes relaci N:N obraty za poslední roky. Potřebuji vybrat všechny zákazníky a k nim obraty, ale tak, aby i když ten obrat nebude existovat se přesto ty zákazníci objevili.

$customers->select("*, :customers_yeardata.value, customers.id")->joinWhere(":customers_yeardata.customer_id = customers.id AND :customers_yeardata.year = ?", date("Y"));

Tento kód funguje až na to, že pokud obrat není, tak mi to ty zákazníky nezobrazí. Vygeneruje následující příkaz:

SELECT *, customers_yeardata.value, customers.id
FROM customers
LEFT JOIN customers_yeardata ON customers.id = customers_yeardata.customer_id
WHERE (active = 1) AND (platform = 3) AND (OZ_id = ‚123‘) AND
(customers_yeardata.customer_id = customers.id AND customers_yeardata.year = ‚2017‘)
ORDER BY customer_category ASC, company_name ASC

Já potřebuji tu podmínku customers_yeardata dostat za ten join:

SELECT *, customers_yeardata.value, customers.id
FROM customers
LEFT JOIN customers_yeardata ON customers.id = customers_yeardata.customer_id AND
(customers_yeardata.customer_id = customers.id AND customers_yeardata.year = ‚2017‘)
WHERE (active = 1) AND (platform = 3) AND (OZ_id = ‚123‘)
ORDER BY customer_category ASC, company_name ASC

Jde to vůbec? Díky za pomoc! :)

norbe
Backer | 405
+
+1
-

Zkus:

$customers->select("*, :customers_yeardata.value, customers.id")->joinWhere(":customers_yeardata", ":customers_yeardata.customer_id = customers.id AND :customers_yeardata.year = ?", date("Y"));

joinWhere má oproti where parametr navíc, aby věděl ke kterému joinu podmínku připojit. Spíš mne ale překvapilo, že ti to vygenerovalo funkční dotaz a nehodilo chybu..

peterpp
Člen | 9
+
0
-

Do joinWhere netreba dávať podmienku pre samotné spojenie tabuliek. Takže podľa mňa takto:

$customers->select("customers.*, :customers_yeardata.value")
	->joinWhere(":customers_yeardata", ":customers_yeardata.year", date("Y"));