- Det jag vill göra är att ta ut alla id:n från en stad med en typ från tabell A.
- De id som är uttagna ur tabell A ska också tas ut ur tabell B, C och D. Där jag för varje id på en speciell dag ska göra följande matematiska operation.
tabell B + (variabel x)*tabell C + (variabel y)*tabell D
Dessa ska sedan sorteras från lägsta till högsta och sen skrivas ut i tabell form:
Dvs vill jag ha ut alla id:en från staden göteborg av typen 1 så ska slutresultatet bli:
1. du har konstiga ID nummer. det brukar var siffror.
2. "göteborg typ 1" finns ju med 2 ggr, samma med "stockholm typ 1"
3. vad är det du vill göra!?
4. tabell b, c, och d har räknare, för all del, men borde även ha en kolumn som heter något i stil med intCityID eller intCityTypeID för att peka på rätt stad i tabell A.
Det går ju säkert att göra lite hur som helst... med vilka namn som helst... men försök att vara lite konsekvent och undvik bokstäver som namn på dina tabeller!! Det skadar inte att vara tydlig! Dels för din egen del, dels för situationer som dessa, då du ska försöka få andra att ta del av din kod och dessutom försöka att förstå hur du tänker....
Trust me. Det händer! :-)
Bättre med lite längre namn där man förstår vad som avses än att falla för frestelsen att ha så korta namn som möjligt -- på bekostnad av tydlighet. Du kommer själv glömma hur du tänkte... även om du inte tror på det just nu. Testa själv! Kör ett annat projekt i en vecka eller två och du är helt borta i dessa förkortningar! :-) Det är en dålig grej!
select a.id
, b.prisdag1 + c.prisdag2*x + d.prisdag3*y
from tbl_a a
inner
join tbl_b b
on a.id = b.id
inner
join tbl_c c
on b.id = c.id
inner
join tbl_d d
on c.id = d.id
where a.stad = 'göteborg'
and a.typ = 1
order
by 2
Hmm, få se om Peter eller jag tolkade frågan rätt...
Det är lite oklart vad prisdagx gör, och om priserna för de olika dagarna ligger i olika tabeller, eller som kolumner i var och en av tabellerna.
SELECT
ta.id AS id
(
SELECT CASE ta.typ
WHEN 1 THEN tb.prisdag1
WHEN 2 THEN tb.prisdag2
WHEN 3 THEN tb.prisdag3
WHEN 4 THEN tb.prisdag4
END
) +
$x * (
SELECT CASE ta.typ
WHEN 1 THEN tc.prisdag1
WHEN 2 THEN tc.prisdag2
WHEN 3 THEN tc.prisdag3
WHEN 4 THEN tc.prisdag4
END
) +
$y * (
SELECT CASE ta.typ
WHEN 1 THEN td.prisdag1
WHEN 2 THEN td.prisdag2
WHEN 3 THEN td.prisdag3
WHEN 4 THEN td.prisdag4
END
) AS totalsumma
FROM tabellA ta
JOIN tabellB tb ON tb.id = ta.id
JOIN tabellC tc ON tc.id = ta.id
JOIN tabellD td ON td.id = ta.id
WHERE ta.stad = '$stad' AND ta.typ = '$typ'
ORDER BY totalsumma ASC;