Multidesk.be » Forums » Programmeren algemeen » SQL distinct

  • Pagina
  • 1 van 1
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door Toren op maandag 10 maart 2008 om 10:09:04.
Toren heeft nog geen avatar toegevoegd
Multiviteit: 230
Hoi ,
Weet iemand hoe een distinct werkt , maar ik heb ook het Id key nodig !
vb

SELECT DISTINCT id, land_naam FROM tabel ;
Hij geeft gewoon alles omdat die id altijd verschillend is, maar kan ik ook enkel de naam van het land + de id van dat land opvragen ?
Hoe moet dat juist ?

^ Reactie #1 geschreven door SMG op maandag 10 maart 2008 om 14:17:34.
SMG's avatar
Multiviteit: 12000
Moderator
Gaat niet ;)
Ook logisch, een distinct gaat alles wat al 1 keer voorgekomen is eruit gooien. Welke ID gaat hij dan moeten weergeven als hij er een paar heeft uitgegooid?

Voorbeeldje:
Dit staat in je databank:
1 lala
2 lolo
3 lala

SELECT distinct naam from testtbl;
resultaat:
lala
lolo

SELECT distinct naam, id from testtbl;
resultaat:
1 lala
2 lolo
3 lala
aangezien 1 lala en 2 lala niet meer gelijk is aan elkaar. Als je die ene eruit wilt halen, maar toch wilt weergeven, wat is het nut dan van je distinct?

Als je je probleem duidelijk formuleert kan ik er misschien wel iets op vinden ;)
^ Reactie #2 geschreven door joke op maandag 10 maart 2008 om 14:51:29.
joke's avatar
Multiviteit: 2669
Morgen wordt het beter.
Hoi Toren,

In jou tabel is aan één id één land_naam gekoppeld maar één land_naam heeft blijkbaar meerdere id's.

Je kan wel een lijst opvragen van de verschillende land_namen met:
SELECT DISTINCT land_naam FROM tabel ;
Maar daar houd het dan ook mee op omdat in jou tabel er meerdere landen voorkomen met dezelfde naam.

Joke

Dochters, tot hun 16e zeuren ze om een paard en op hun 17e komen ze thuis met een ezel
^ Reactie #3 geschreven door Toren op dinsdag 11 maart 2008 om 09:32:19.
Toren heeft nog geen avatar toegevoegd
Multiviteit: 230
hoi,
De bedoeling is het creeren van een xml structuur
vb:

<Landen>
<Land name="Belgie" id="1"/>
<Land name="Ned" id="2"/>
</Landen>
^ Reactie #4 geschreven door joke op dinsdag 11 maart 2008 om 12:57:33.
joke's avatar
Multiviteit: 2669
Morgen wordt het beter.
Toren, op die manier heeft dat weinig zin. Je moet eerst je tabellen normaliseren want in uw geval staan in jou tabel is een land niet uniek. Het komt dus meerdere keren in je tabel voor maar telken met een andere id.

Zo lang je werkt met tabellen die niet genormaliseerd zijn zul je problemen blijven hebben.

Joke

Dochters, tot hun 16e zeuren ze om een paard en op hun 17e komen ze thuis met een ezel
^ Reactie #5 geschreven door Toren op donderdag 13 maart 2008 om 09:21:00.
Toren heeft nog geen avatar toegevoegd
Multiviteit: 230
ja weet het ... maar het is mijn tabel niet !
En ik kan die niet aanpassen omdat die tabel al gelinkt is met andere tabellen.
Dus moet ik het zo doen
^ Reactie #6 geschreven door SMG op donderdag 13 maart 2008 om 10:05:34.
SMG's avatar
Multiviteit: 12000
Moderator
Als je databank een slechte constructief heeft zit je wel behoorlijk in de penarie. Sommige dingen zullen dan niet meer gaan met SQL alleen en andere zullen dan enkel gaan door veel moeilijkere SQL codes te schrijven.

In jouw geval ken ik niet echt een mogelijke oplossing. Redundantie is de grootste vijand van een databank.
Ik vraag mij ook wel af wat je eigenlijk verwacht dat in dat XML bestand gaat zetten als joke gelijk heeft met zijn zin:

Dixit

In jou tabel is aan één id één land_naam gekoppeld maar één land_naam heeft blijkbaar meerdere id's.

Dan heb je toch automatisch zoiets als resultaat:
CODE
  1. <Landen>
  2. <Land name="Belgie" id="1"/>
  3. <Land name="Ned" id="2"/>
  4. <Land name="Belgie" id="3"/>
  5. </Landen>

Welk van de 2 Belgie's wil je dan dat hij toont?

Je probleem kan je oplossen door je SQL te combineren met je programmeercode (bijvoorbeeld PHP). Dan zal je moeten gaan bijhouden in PHP welke landen er al zijn geweest en telkens controleren bij elk nieuw land of dit er al in staat. Maar dit is geen oplossing voor je probleem want je weet dan nog steeds niet welke ID van de 2 of meer dat je moet tonen.

Kortom, de databank is een puinhoop. Die moet opnieuw opgebouwd worden anders zal je altijd problemen blijven maken.
Een ander stom probleem dat je zal tegenkomen is bijvoorbeeld:
Som alle steden op van België. Je zal dan eerst al in je landen tabel moeten gaan zoeken welke België's er zijn en die allemaal gaan linken met de steden.
In een kleine databank zal dit nog niet al te veel moeite kosten om dit op te sporen, is je databank wat groter is het een zware dobber.

We kunnen je hier gerust bij helpen maar dan is er momenteel veel te weinig informatie over.
  • Pagina
  • 1 van 1

Snel-antwoordformulier
Toon uitgebreid antwoordformulier Bericht nalezen Bericht plaatsen