Kom ihåg mig?
Home Menu

Menu


mysql if/else, flera tabeller

 
Ämnesverktyg Visningsalternativ
Oläst 2007-12-07, 00:14 #1
Starwebs avatar
Starweb Starweb är inte uppkopplad
Flitig postare
 
Reg.datum: Jan 2004
Inlägg: 332
Starweb Starweb är inte uppkopplad
Flitig postare
Starwebs avatar
 
Reg.datum: Jan 2004
Inlägg: 332
Om man har två sql tabeller, tabell A som innehåller två kolumner: id, namn
och tabell B som innehåller tre kolumner: id, tabella_id, nummer

Nu vill jag hämta ut alla värden från tabell A och joina in tabell B,
men i tabell B så finns det ibland ETT värde där tabell A:s id matchar tabell B:s tabella_id, och ibland FLERA värden.

Exempel, tabell A:
id, namn
1, adam
2, kalle
3, bertil

Exempel, tabell B:
id, tabella_id, nummer
1, 1, 1
2, 1, 3
3, 2, 4
4, 3, 1
5, 3, 2
6, 3, 3
7, 3, 4

Hur ska min sql fråga se ut om jag vill ha ut en lista med värden där tabell A.id matchar tabell B.tabella_id i en viss ordning?
Låt oss säga att jag vill ha ut tabell B enligt nummerföljden 2,3,1,4 dvs OM det finns ett värde i tabell B med nummer 2 där tabell A.id matchar tabell B.tabella_id så är det den raden i tabell B jag vill ha, men om det INTE finns ett värde med nummer 2 så vill jag istället ha värde 3, finns ej värde 3 så värde 1, annars värde 4.

* Går det att skriva en mysql-förfrågning på det viset?
* Går det att få till i både mysql 4.x och mysql 5.x?
* Eller om det ej går, ge gärna förslag på hur på smidigast sätt får ut "bästa möjliga" sql, för att därefter loopa sig igenom värdena i php och få ut dom enligt ovanstående... Det är dock inget bra val då det ibland handlar om mängder med rader =/

Jag ANTAR att det kräver if() else() alternativt en case/switch-sats i sql-förfrågningen,
något jag själv ännu ej satt mig in i.



Fiktiv sql-förfrågning:

SELECT
*
FROM tabellA
If(tabellB.nummer == 2) then
INNER JOIN tabellB
ON ((tabellA.Id = tabellB.tabella_id) AND (tabellB.nummer = 2))
elseIf(tabellB.nummer == 3) then
INNER JOIN tabellB
ON ((tabellA.Id = tabellB.tabella_id) AND (tabellB.nummer = 3))
elseIf(tabellB.nummer == 1) then
INNER JOIN tabellB
ON ((tabellA.Id = tabellB.tabella_id) AND (tabellB.nummer = 1))
elseIf(tabellB.nummer == 4) then
INNER JOIN tabellB
ON ((tabellA.Id = tabellB.tabella_id) AND (tabellB.nummer = 4))



Av ovanstående exempel på vad tabellA och tabellB innehåller för värden så hade jag alltså önskat få ut följande,
om vi kör enligt nummerföljden 2,3,1,4:
tabellA.id, tabellA.namn, tabellB.id, tabellB.nummer
1, adam, 1, 3
2, kalle, 3, 4
3, bertil, 5, 2



Hoppas ni förstår hur jag menar med min fråga =)
Starweb är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 18:26.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017