[SQL] Records en subrecords in één tabel

Pagina: 1
Acties:
  • 119 views sinds 30-01-2008
  • Reageer

  • wustenveld
  • Registratie: Februari 2002
  • Laatst online: 08-08 17:31
Ik heb ongeveer een volgende tabel:
id, parentid, titel
1, 0, 'een titel'
2, 0, 'een titel'
3, 1, 'een titel'
4, 1, 'een titel'
5, 0, 'een titel'

Nu wil ik een query maken die ervoor zorgt dat alles met parentid onder het bijbehorende id komt te staan (die weer gesorteerd is op parentid).

Hoe kan ik dit het beste aanpakken, ik heb al zitten denken aan joinen, maar dan krijg ik onwijs veel velden in de uitvoer van de query. En misschien denk ik wel compleet de verkeerde kant uit nu.

Kan iemand mij helpen ??

Verwijderd

Je wil dus een boomstructuur in een tabel opslaan, en die er ook weer uithalen. Deze structuur is lastig voor SQL, en je zult praktisch gezien meestal maar 1 laag diep met een query uit de tabel halen, en daarbij zal je de tabel aan zichzelf moeten joinen.

Laat eens zien wat je tot nu toe hebt geprobeerd, en wat jij als resultaat wil hebben.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
Ik denk niet dat het mogelijk is in 1 query.
Je zult een script of SP moeten schrijven die dat voor jou verwezenlijkt. (mbhv recursiviteit).

https://fgheysels.github.io/


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Wat voor database gebruik je?
In Oracle doe je dit met een 'connect by' query.

Who is John Galt?


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

zoek eens op boomstructuren of tree structures
Er zijn al meerdere topics hierover langsgekomen op GoT.
Je zult dan wel voor een andere opslag van je boom structuur moeten kiezen.

  • momania
  • Registratie: Mei 2000
  • Laatst online: 00:32

momania

iPhone 30! Bam!

Goodielover schreef op 04 april 2003 @ 20:23:
Er zijn al meerdere topics hierover langsgekomen op GoT.
Dit is er 1 van:
(ASP) Lus voor het uitlezen van categorieen
:Y)

Neem je whisky mee, is het te weinig... *zucht*


Verwijderd

Op www.webgoeroe.net heeft hier een heel mooi artikeltje over gestaan. En ook op GoT is het een en ander te vinden...

[ Voor 3% gewijzigd door Verwijderd op 04-04-2003 22:20 ]


  • wustenveld
  • Registratie: Februari 2002
  • Laatst online: 08-08 17:31
Ik gebruik een mySQL database, met PHP script.
Ik heb het tot nu toe geprobeerd met de tabel aan zichzelf te joinen. Ik krijg dan alleen een hele uitgebreide recordset als resultaat.

Ik heb volgende geprobeerd
code:
1
2
3
4
5
SELECT *
FROM paginas AS p
LEFT JOIN paginas as p1 ON (p.id = p1.parentid)
WHERE p.parentid = 0
ORDER BY p.id


Hiermee is het mogelijk om één niveau diep te gaan, maar stel dat het volgende aan de hand is:

1, 0, 'een titel'
2, 0, 'een titel'
3, 1, 'een titel'
4, 3, 'een titel'
5, 3, 'een titel'

Dan wil ik dus in m'n overzicht dat onder het record met ID=1 3 titels tevoorschijn komen (namelijk ID 3, 4 en 5). Ik zal ondertussen ook jullie tips voor het zoeken op boomstructuren of tree structures opvolgen. Als jullie ondertussen nog ideeën hebben hoor ik het graag.
Alvast bedankt :)

Verwijderd

In een eerder topic staat een SQL Server function die het gevraagde kan doen. In een SQL statements kan je niet n levels diep querien (waarbij n onbekend is) querien. Wat je zou kunnen doen is een string veld opnemen waar alle Id's van de parents gescheiden door punten staan. Bijv. '1.5.156.12543'. Dus 12543 heeft als parent 156, die heeft 5 als parent enz. Dit is wat meer werk, maar nu kan je alle kinderen van 5 opvragen (nl. where parentagefield like '1.5.%').
Maar zoals gezegd, zie webgoeroe en een van de vele topics hiervoor :)

/Edit: http://www.webgoeroe.net/item/277
en http://search.gathering.t...5D=&data%5Bsearch%5D=Zoek

[ Voor 27% gewijzigd door Verwijderd op 07-04-2003 10:40 ]

Pagina: 1