Autor Zpráva
sql
Profil *
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

SELECT *, IF(`IDD` = 0, `ID`, `IDD`) 'parentID'
FROM tabulka
ORDER BY `parentID` DESC, `IDD`, `ID`
Funguje to pro dvě úrovně, ale víc jsem nezkoušela.
Kajman
Profil
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 *
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 *
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
sql:
ORDER BY parentID DESC, IDD, ID
sql
Profil *
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`
(pardon, asi jsem špatně pochopila, jak funguje MIN(), nemám zkušenosti se sqlite.)
sql
Profil *
To je uplne presne ono...moooc dekuji za pomoc

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: