Gå til innhold

Anbefalte innlegg

Hvordan kan man på en elegant måte benytte kontrollstrukturer i en mySQL spørring?

 

La oss si at jeg har 2 tabeller. I tabell 1 (Package) ligger endel data lagret direkte og med en fremmednøkkel til en tabell 2 (Person). Tabell 1 har også et felt fkey, som kan være enten true eller false. Er den true, skal man benytte fremmednøkkel og verdiene fra "fremmednøkkeltabellen". Er den false, er det verdiene som ligger direkte i tabell 1 som skal benyttes. Det skal bare kjøres 1 spørring.

 


Package (id, fkey, pid, name, address, zip, city, country, email)
Person (id, fname, lname, street1, zip, placename, country, email)

 


SELECT id, state, shipment,
CASE fkey
 WHEN 'true' THEN CONCAT_WS(' ', person.fname, person.lname)
 ELSE package.name
END AS name
CASE fkey
 WHEN 'true' THEN person.street1
 ELSE package.address
END AS address
CASE fkey
 WHEN 'true' THEN person.zip
 ELSE package.zip
END AS zip
CASE fkey
 WHEN 'true' THEN person.placename
 ELSE package.city
END AS city
CASE fkey
 WHEN 'true' THEN person,country
 ELSE package.country
END AS country
CASE fkey
 WHEN 'true' THEN person.email
 ELSE package.email
END AS email
FROM Package 
LEFT OUTER JOIN Person ON Person.id = Package.pid
WHERE Package.id = [value]

 

Så vidt jeg vet vil dette kunne fungere, men i mine øyne er det en stygg spørring, som ikke minst er TUNG å vedlikeholde.

 

Dette må vel kunne løses med elegant enn jeg har skissert i spørringen over? :hmm:

Lenke til kommentar
Videoannonse
Annonse

Du kan jo trekke person/adresseinformasjon ut i en egen tabell, som de to andre tabellene refererer til. Ellers bør du ta en liten titt på union, som lar deg så sammen resultatet av to spørringer. Da kan du først hente ut alle som bruker fremmednøkkel, deretter alle som ikke gjør det. Det er forresten ikke behov for et eget felt for å se om du bruker fremmednøkkel eller ei, du kan sjekke om fremmednøkkelen "is null".

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å
×
×
  • Opprett ny...