Autor | Zpráva | ||
---|---|---|---|
sql Profil * |
#1 · Zasláno: 20. 2. 2012, 22:18:11
Prosim, potreboval bych poradit s nasledujicim.
Mam radky kde jsou sloupce ID a IDD napr. ID = 1 IDD = 0 ID = 2 IDD = 1 ID = 3 IDD = 1 ID =4 IDD = 0 ID = 5 IDD = 1 ID = 6 IDD = 4 ID = 7 IDD = 0 a porebuji nasledujici setrideni ID 7 4 6 1 2 3 5 tzn IDD = 0 je jako ridici pro dalsi mozny podzaznam Dekuji za pomoc a radu |
||
Tori Profil |
#2 · Zasláno: 20. 2. 2012, 22:37:47
SELECT *, IF(`IDD` = 0, `ID`, `IDD`) 'parentID' FROM tabulka ORDER BY `parentID` DESC, `IDD`, `ID` |
||
Kajman Profil |
#3 · Zasláno: 20. 2. 2012, 22:38:29
Jde Vám o stromovou strukturu? S tou umí nativně jen některé databáze (hledejte např. connect by). Případně si můžete předpočítat pomocné sloupce i pro běžnější databázové servery (hledejte traverzování kolem stromu).
|
||
sql Profil * |
#4 · Zasláno: 20. 2. 2012, 23:01:40
SELECT *, IF(`idd` = 0, `id`, `idd`) 'parentID' FROM tabulka ORDER BY `parentID` DESC, `idd`, `id` LIMIT 0,10
ale SQLSTATE[HY000]: General error: 1 no such function: IF prosim je to platne i pro SQLite? dekuji za pomoc |
||
Tori Profil |
sql:
Aha, tak potom bych použila SELECT *, MIN(`IDD`,`ID`) AS 'parentID' - připadá mi logické, že nejdřív uložím kategorii a teprv potom její podkategorie, takže kategorie bude mít vždy nižší ID než podkategorie.
Kajman: ↓ Ano, ale říkala jsem si, že třeba chce fakt jen dvě úrovně (občas to tu tazatelé výslovně zmíní), tak pak může používat jakoby strom otočený o 90°. |
||
Kajman Profil |
sql:
„prosim je to platne i pro SQLite?“ Není (tam by se použilo case) a už se laskavě naučte psát hned, s jakou databází zápasíte. Tori: Mrni na příklad - ID 6 je hned za ID 4. Proto to vypadá na stromovou strukturu, ale těžko hádat. |
||
sql Profil * |
#7 · Zasláno: 20. 2. 2012, 23:47:16
SELECT * , MIN(`idd`,`id`) AS 'parentID' FROM tabulka ORDER BY `parentID` DESC, `id`
zobrazi se v poradi 6-4 2-1 3-1 5-1 1-0 4-0 7-0 |
||
Tori Profil |
#8 · Zasláno: 20. 2. 2012, 23:56:19
sql:
ORDER BY parentID DESC, IDD, ID |
||
sql Profil * |
#9 · Zasláno: 21. 2. 2012, 00:02:27
SELECT * , MIN(`idd`,`id`) AS 'parentID' FROM tabulka ORDER BY `parentID` DESC, `idd`, `id`
vysledek je opet 6-4 2-1 3-1 5-1 1-0 4-0 7-0 |
||
Tori Profil |
Tak CASE, jak radil Kajman:
SELECT *, CASE WHEN `IDD` = 0 THEN `ID` ELSE `IDD` END 'parentID' FROM tabulka ORDER BY `parentID` DESC, `IDD`, `ID` |
||
sql Profil * |
#11 · Zasláno: 21. 2. 2012, 00:26:48
To je uplne presne ono...moooc dekuji za pomoc
|
||
Časová prodleva: 12 let
|
0