Kezdőoldal » Számítástechnika » Programozás » Hogyan tudnám kivitelezni ezt...

Hogyan tudnám kivitelezni ezt egyetlen SQL lekérdezésben?

Figyelt kérdés

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?



#MySQL #SQL #tárolt eljárások #mysql ciklusok
2019. nov. 22. 16:00
1 2
 11/14 anonim ***** válasza:

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.

2019. nov. 22. 20:29
Hasznos számodra ez a válasz?
 12/14 A kérdező kommentje:

Szerintem amit leírtál nem jó, de amúgy lehet ilyet művelni sql-ben, amit leírtam:

[link]

2019. nov. 22. 21:19
 13/14 anonim ***** válasza:

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.

2019. nov. 22. 21:44
Hasznos számodra ez a válasz?
 14/14 A kérdező kommentje:
Megoldottam ezzel a cursor-rel.
2019. nov. 22. 22:04
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!