Gå til innhold

Hvordan hente en id kun én gang?


Anbefalte innlegg

Videoannonse
Annonse
Hvordan kan jeg skrive ut hver kontaktid kun én gang? Kontaktpersonene kan ligge i flere klasser, så derfor blir de skrevet ut flere ganger.

 

http://norskwebforum.no/pastebin/2028

5846074[/snapback]

Tja, det er flere måter å fikse dette på, men det varierer selvfølgelig med databaseimplementasjon og hva du ønsker å oppnå.

 

Dersom du ønsker å aggregere opp klassene slik at disse listes som en kommaseparert liste (eller tilsvarende) så blir du nødt til å bruke en av følgende:

  • Custom Aggregation (f eks Oracle 9/10, MSSQL 2005)
  • While Loop (evt Cursor) for de som ikke støtter egendefinerte aggregeringer

Dersom du ikke trenger klassenavnene kan du utelate de i sin helhet, bortsett fra en corelated subquery for å sjekke at vedkommende går i en av klassene.

 

Håper dette var til hjelp, og hvis det var noe du savnet i svaret så vil informasjon om hva du ønsker å oppnå, samt informasjon om databaseplattform, være en fordel.

Lenke til kommentar

Fikk hjelp på Norsk Webforum:

 

SELECT DISTINCT kontakt.kontaktid, kontakt.navn, kontakt.epost
FROM lag
RIGHT JOIN kontakt ON ( lag.kontaktid = kontakt.kontaktid )
LEFT JOIN klasse ON ( lag.klasseid = klasse.klasseid )
WHERE klasse.klasseid =8 || klasse.klasseid =9 || klasse.klasseid =10 || klasse.klasseid =11 || klasse.klasseid =12 || klasse.klasseid =15 || klasse.klasseid =16 || klasse.klasseid =17 || klasse.klasseid =18
ORDER BY kontakt.epost

Lenke til kommentar
Fikk hjelp på Norsk Webforum:

 

SELECT DISTINCT kontakt.kontaktid, kontakt.navn, kontakt.epost
FROM lag
RIGHT JOIN kontakt ON ( lag.kontaktid = kontakt.kontaktid )
LEFT JOIN klasse ON ( lag.klasseid = klasse.klasseid )
WHERE klasse.klasseid =8 || klasse.klasseid =9 || klasse.klasseid =10 || klasse.klasseid =11 || klasse.klasseid =12 || klasse.klasseid =15 || klasse.klasseid =16 || klasse.klasseid =17 || klasse.klasseid =18
ORDER BY kontakt.epost

5847556[/snapback]

Var jo mer eller mindre det samme som jeg sa, droppe klasse i utlistingen.

 

Forøvrig så bør du se på IN, jeg regner med at MySQL også støtter det:

 

SELECT DISTINCT kontakt.kontaktid, kontakt.navn, kontakt.epost
FROM lag
RIGHT JOIN kontakt ON ( lag.kontaktid = kontakt.kontaktid )
LEFT JOIN klasse ON ( lag.klasseid = klasse.klasseid )
WHERE klasse.klasseid IN (8,9,10,11,12,15,16,17,18)
ORDER BY kontakt.epost

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...