több tábla
Sziasztok!
Egy picit elakadtam.
Van 4 táblám.
1. cégadatok tartalmazza a cég adatait + a cég kategóriáját ID alapján
2. kategória tartalmazza a kategória nevét és a kategória ID-jét
3. termékek tartalmazza a termék nevét és a termék ID-jét
4. termektoceg kapcsoló tábla tartlamazza a termék ID-jet és a termékhez tartozó cég ID-jét
egy céghez több termék is tartozhat
remélem ez az adatbázis felépítés nem hibás?!
Szeretnék egy lekérdezést ami visszaadja a cégadatokat + a cég kategória nevét és a termék nevére is lehessen szűrnide ez a lekérdezés hibás.
■ Egy picit elakadtam.
Van 4 táblám.
1. cégadatok tartalmazza a cég adatait + a cég kategóriáját ID alapján
2. kategória tartalmazza a kategória nevét és a kategória ID-jét
3. termékek tartalmazza a termék nevét és a termék ID-jét
4. termektoceg kapcsoló tábla tartlamazza a termék ID-jet és a termékhez tartozó cég ID-jét
egy céghez több termék is tartozhat
pl termekID cegID
1 1
1 2
2 1
2 2
1 1
1 2
2 1
2 2
remélem ez az adatbázis felépítés nem hibás?!
Szeretnék egy lekérdezést ami visszaadja a cégadatokat + a cég kategória nevét és a termék nevére is lehessen szűrni
SELECT DISTINCT
(cegek.cegID) AS cegID,
cegek.cegnev,
kategoriak.kategorianev
FROM
termektoceg
LEFT JOIN cegek ON (termektoceg.cegID = cegek.cegID)
INNER JOIN termekek ON (termektoceg.termekID = termekek.termekID)
INNER JOIN kategoriak ON (cegek.kategoriaID = kategoriak.kategoriaID)
WHERE
termekek.nev LIKE "%"
Hibás?
Másrészt mi lenne, ha használnál kódkiemelőt? Akkor egyszerűbb lenne olvasni.
Egyébként mivel termékre keresel, én a másik oldalról indulnék el, nevezetesen a termékek felől, és onnan joinolnék.
elnézést
pl: zokni.
a hiba az volt a lekérdezésben hogy a termektoceg.nev LIKE '%' sort berakom nem tér vissza az összes céggel.
Logikai hiba
Naszóval, két kérdés:
- Van olyan termék, amelyiknek egynél több gyártója van?
- Ha nem, akkor minek kapcsolótábla?
Egyébként mint mondottam, én a termék felől indulnék el, mert nyilván az az érdekes. Ha nem ez az érdekes, akkor légy szíves magyarázd el, hogy mit szeretnél elérni a lekérdezéssel, mert szerintem, valami logikai bukfenc lesz.
lekér
a lekérdezésből azt szeretném visszakapni.
Azokat a cégeket amik gyártanak zoknit vagy cipőt
ha nem adok meg terméket akkor az összes gyártót adja vissza
Egész mondatok?
tehát
De ha nem adok terméket, akkor térjen vissza az összes gyártóval.
Köszönöm a segítségedet.
Nem megy...
Én azt javasolnám (ha van 5-ös MySQL-ed), hogy készíts egy view-t, amelyben kiválasztod a termék-gyártó párosokat, pl így: (hasból írtam, szóval nem biztos, hogy jó)
köszönöm
ez ha nincs termékre keresés:
SELECT DISTINCT(cegek.cegID),
cegek.cegnev,
cegek.ceghely,
cegek.cegkerulet,
cegek.cegirsz,
cegek.cegutca,
cegek.ceghazszam,
cegek.telefon,
cegek.fax,
cegek.email,
cegek.url,
cegek.ervenyesseg,
cegek.kezdet,
cegek.leiras,
cegek.kategoriaID,
kategoriak.kategorianev
FROM
kategoriak INNER JOIN cegek ON (kategoriak.kategoriaID = cegek.kategoriaID)
LEFT JOIN termektoceg ON (cegek.cegID = termektoceg.cegID)
WHERE cegnev LIKE '$cegnev%' AND ceghely LIKE '$varos%' AND cegek.kezdet <= now() AND cegek.ervenyesseg >= now()";
+ kegészül a lekérdezés ezzel ha keresek terméket.
AND termektoceg.nev LIKE '$termeknev%'";
köszönöm a kitartó segítségedet.
Escape + no egybegyógyulás
On: A másik, hogy itt belejöttek olyan táblák és adatok, amikről az előző leírásodban nem említettél semmit. Javaslom, hogy gyárts view-kat (nézeteket), mert ez nagyban megkönnyíti a tervezést, ha csak egyszerű táblákból kell kiválogatni.
Ha jól nézem, itt fölöslegesen joinolsz a termektoceg táblával, ha nincs ermék, csak akkor kell, ha használod is. Mint mondottam, ne próbáld meg egy lekérdezésből megcsinálni. Oldd meg teljesen külön lekérdezésekkel. Az ilyen egybegyógyulások mindig csak szíváshoz vezetnek.