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
 1/14 anonim ***** válasza:
75%
2019. nov. 22. 16:25
Hasznos számodra ez a válasz?
 2/14 anonim ***** válasza:
75%
A -1 helyett van a NULL az adatbázisokban.
2019. nov. 22. 16:40
Hasznos számodra ez a válasz?
 3/14 A kérdező kommentje:
Nem jó ez a 'Hierarchical and recursive queries' dolog, nincs ilyen verziójú mysql-em. Van egy frissen telepített saját vps-em debian 10-zel mysql-lel meg php-val, és az a mysql szerver nem tud ilyen rekuzív lekérdezést, fel se ismeri a kifejezést. Ez olyan dolog a mysql-ben ami van, de nincs. Ezért kéne a stored procedure.
2019. nov. 22. 16:45
 4/14 anonim ***** válasza:
100%

Én inkább a következő adatbázis szerkezetet javaslom:


Categories(CategoryID, CategoryName)

PRIMARY KEY (CategoryID)


SubCategories(CategoryID, MainCategory)

FOREIGN KEY (CategoryID)

FOREIGN KEY (MainCategory) REFERENCES Categories(CategoryID)


Tehát a Categories táblában eltárolod az összes létező kategóriát, majd egy SubCategories kapcsolótáblába benyomod, hogy melyik kategória melyik kategória alá tartozik. Ezeket utána szépen le tudod kérdezni, csak figyelj arra, hogy ha egy kategória nem alkategória (azaz nincs benne a SubCategories táblában), akkor az nem lesz benne a SubCategories táblában.

2019. nov. 22. 16:47
Hasznos számodra ez a válasz?
 5/14 anonim ***** válasza:
75%
#4: Ez hajszál pontosan ugyanaz, mint a kérdezőé.
2019. nov. 22. 16:51
Hasznos számodra ez a válasz?
 6/14 anonim ***** válasza:
100%

A kérdező feleslegesen el akarja tárolni "-1" értékkel azokat a kategóriákat is a második táblában, amik nem alkategóriák. Ezen kívül a RelationID nem értem, hogy miért kell, azon is lehet optimalizálni.


Az én tábláimban valahogy így nézne ki a kategóriák lekérdezése, azt elfelejtettem odaírni:


Fő kategóriák:


SELECT *

FROM Categories

WHERE CategoryID NOT IN (

SELECT CategoryID FROM SubCategories

);


Alkategóriák:


SELECT *

FROM SubCategories;

2019. nov. 22. 16:58
Hasznos számodra ez a válasz?
 7/14 anonim ***** válasza:
75%
Csak hogy Te 2 szintű kategóriákban gondolkozol, a kérdező meg nem.
2019. nov. 22. 17:05
Hasznos számodra ez a válasz?
 8/14 anonim ***** válasza:
100%
Ez mivel tud többet, mintha egy táblád lenne, és abban lenne a parent is?
2019. nov. 22. 17:24
Hasznos számodra ez a válasz?
 9/14 anonim ***** válasza:
100%

A többszintű kategória szerkezetileg annyi, hogy a SubCategories táblában több sor van, pl.:


2 | 1

3 | 2

5 | 2


Mit is jelent ez?:


- A 2-es kategória az 1-es alá tartozik.

- A 3-as kategória a 2-es alá tartozik.

- Az 5-ös kategória szintén a 2-es alá tartozik.


Grafikusan felírva:


-1

--2

----3

----5

2019. nov. 22. 17:27
Hasznos számodra ez a válasz?
 10/14 A kérdező kommentje:

Köszönöm szépen az eddigieket, de szerintem ezekből igazából egyik se nagyon működik megfelelően.


Olyasmire gondoltam, hogy lenne egy stored procedure, ami csak annyit tesz, hogy bemenő paraméter, történetesen a CategoryID alapján inner joinolva leszedi a kategória adatokat a két táblából.


Ezt egy másik tárolt eljárás hívja meg úgy, hogy valamiféle ciklusban lekérdezgeti egyenként a CategoryID-kat, és a CategoryID-t mint paramétert átadja az előzőekben vázolt tárolt eljárásnak.

Az a problémám ezzel, hogy nem tudom, hogy szintaktikailag ez hogyan lehetne helyes úgy, hogy működjön is.

2019. nov. 22. 18:36
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!