Hogyan tudnám kivitelezni ezt egyetlen SQL lekérdezésben?
Egy webárzház rendszert fejlesztek éppen, és a termékkategóriákat próbálom megoldani. Van rá öteltem, méghozzá az, hogy készítek két táblát, az egyikben tárolom a kategóriákat és az elnevezésüket. Annyira egyszerű, hogy CategoryID, CategoryName
Ebből áll, a típusok nyilván int és varchar.
A másik táblában lesznek a különböző kategóriák közötti kapcsolatok, a következő mezőkkel:
RelationID int primary key auto_inrement
CategoryID int (nyilván foreign key)
ParentID int DEFAULT -1
Amelyik kategória alkategória, annak lesz ugye egy ParentID-ja, különben -1 értéket vesz fel ez a mező.
Szeretnék egy olyan tárolt eljárást készíteni, ami addig megy végig az első táblából vett CategoryID-kon, amíg és kérdezi le a leszármazott kategóriákat, amíg ki nem rajzolódik ebből egy kategória hierarchia.
Meg lehet ezt valahogyan oldani?
Ilyesmire gondolsz?
CREATE PROCEDURE SelectCategories @CategoryID int
AS
SELECT * -- Vagy amit akarsz
FROM FirstTable first
INNER JOIN SecondTable second
ON first.CategoryID = second.CategoryID
WHERE CategoryID = @CategoryID
GO;
Használata:
EXECUTE SelectCategories @CategoryID = 2
"Ezt egy másik tárolt eljárás hívja meg úgy, hogy valamiféle ciklusban lekérdezgeti egyenként a CategoryID-kat"
Ezt nem értem. SQL nyelvről beszélünk, miért kéne végigmenni ciklussal az ID-ken? Nem látok bele a programod működésébe, de én úgy csinálnám, hogy egyetlen SQL SELECT-el kiválasztanám az összes kategóriát cakk-pakk mindenestül, az eredményt eltárolnám valamilyen struktúrában és abból felépítem a menürendszert vagy bármi is legyen ez.
Szerintem amit leírtál nem jó, de amúgy lehet ilyet művelni sql-ben, amit leírtam:
Sry, de ennél többet nem tudok segíteni, mert nem látom, hogy miért jó ez neked és azt sem, hogyan fogod a programkódban felhasználni a lekérdezés eredményét. Az EXECUTE sor végére tényleg kell egy lezáró ";", de ezt leszámítva szintaktikailag jónak kell lennie elvileg.
Egyébként procedúrákat akkor jó az adatbáziskezelő rendszeren belül használni, ha az eredményeket nem programkódból használod utána. Pl. Office Access-ben jelentést generálsz az adatbázisban tárolt adatokból vagy hasonlók. Egy webáruházt viszont gondolom programozási nyelvben írsz, PHP-ban, ahol úgy végigmész a lekérdezésen ciklusokkal, ahogyan azt nem szégyelled. Az általad említett lekérdezés sem tűnik annyira bonyolultnak, hogy procedúrát tároljunk rá, de hát végülis, te tudod.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!