Podmínka v joinu (AND) nette database
- Kakaku
- Člen | 27
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
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..