LEFT JOIN na mimo PK pomoci NTD
- Honzy
- Člen | 22
Ahoj, mam dve tabulky.
inzerat(id_inzerat, nazev, …, id_user)
firma(id_firma, nazev_firma, …, id_user)
a rad bych mel dotaz:
SELECT id_inzerat, nazev, nazev_firma
FROM inzerat
LEFT JOIN firma
ON inzerat
.id_user
=
firma
.id_user
WHERE schvaleno
= 1 AND firma
.id_user
= 10
v modelu mam:
<?php
$table->where('schvaleno', 1);
$table->where('firma.id_user', 10);
?>
protoze navrh databaze nemuzu menit, napsal jsem si vlastni reflection, vysledny join je ale:
SELECT id_inzerat, nazev, nazev_firma
FROM inzerat
INNER JOIN firma ON inzerat.id_user =
firma.id
WHERE schvaleno = 1 AND firma.id_user = 10
nazev joinovane tabulky stejne jako id_user v ON je dobre z reflection, proc to ale bere id jako PK z firmy? Resp. jak mu rict, ze to chci joinout pres id_user? A jak tam lze vecpat LEFT JOIN? Pokud inzerat nema firmu, tak ho chci taky.
- sKopheK
- Člen | 207
Nejsem úplně moudrý z nastíněného schématu db, ale předpokládám, že chceš vytáhnout všechny schválené inzeráty, které patří firmě daného uživatele, čili klasický join přes tabulku, se kterým NDB není příliš velký kamarád. Pokud potřebuješ jen ta data třeba v poli, tak než se s tím nějak dlouho párat, napiš si to standardně přes PDO:
$query = 'SELECT id_inzerat, nazev, nazev_firma
FROM inzerat
LEFT JOIN firma ON inzerat.id_user =
firma.id_user
WHERE schvaleno = 1 AND firma.id_user = 10';
$pdo = $table->getConnection()->getPdo();
$rows = $pdo->query($query)->fetchAll(\PDO::FETCH_ASSOC);
- Honzy
- Člen | 22
@vvoody: mam vyhledavaci formular, ktery uz funguje a nad inzeraty dela filtraci a vysledny selection se preda do strankovani. fungovalo to bezvadne do doby, nez jsem potreboval udelat tento JOIN… To cos poslal udelalo join pres users a stejne zase pres ID :( Navic jeste inner…
@sKopheK: tak samo to jde udelat pres query(Args), ale to bych musel delat strankovani znovu :( Mam napsanou jednu fci pro vsechny, no co uz. Vlastne nechapu, proc to NDB vubec je, kdyz je tam nepouzitelny JOIN, coz je zaklad pro vypis. Mohl jsem to napsat rovnou v dibi, dobre mi tak :)