Mr TMedlem sedan maj 20071 061 inlägg Har 2 tabeller
dom ser ut ungefär såhär:
[B]T_datum[/B]
id
datum
parent_namn_id
meddelande
[B]T_namn[/B]
id
owner_id
group_id
namn
adress
Har idag en SQL för att leta upp alla datum en viss dag som användaren har access till genom att vara medlem i olika grupper.
SELECT *, day(date) as dag FROM T_datum WHERE parent_namn_id in (SELECT id FROM T_name WHERE group_id LIKE 234 OR group_id LIKE 345) AND datum='20100219' ORDER BY dag
Vill nu ha tag i owner_id för att avgöra vem som äger adressen, men hur gör jag då ?
Peter SMedlem sedan dec. 20025 483 inlägg select
t.*,
n.owner_id,
day(date) as dag
from
t_datum d inner join t_name n
on
d.parent_namn_id = n.id and
n.groupid in (234,345) and
t.datum = '20100219'
order by
dag
Mr TMedlem sedan maj 20071 061 inlägg Peter S - Var så glad när jag slapp join (detta då jag har svårt att greppa det) och kunde använda "in", men om det är enda sättet så....
Ska prova och återkomma med resultatet.
Peter SMedlem sedan dec. 20025 483 inlägg I detta fall är join det bästa sättet eftersom du vill hämta information från flera tabeller :)
dAEkMedlem sedan feb. 20041 816 inlägg
Mr T skrev:
Peter S - Var så glad när jag slapp join (detta då jag har svårt att greppa det) och kunde använda "in", men om det är enda sättet så....
Vad är det du inte greppar med joins? Om du inte redan har läst artikeln nedan, läs igenom den och se om det fastnar bättre. Själv tycker jag att det mesta blir mycket enklare att förstå om man får något grafiskt att koppla till.
http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html
Mr TMedlem sedan maj 20071 061 inlägg Ser att jag gjort ett fel.
day(date) as dag
ska ju vara
day(datum) as dag
Så om jag fattar det rät ska det i join bli
day(d.datum) as dag
eller day(t.datum) as dag
(förstår inte varför det både finns t och d ?
Peter SMedlem sedan dec. 20025 483 inlägg T och n är alias för tabellerna som gör att man slipper skriva ut tabellnamnen varje gång man refererar till fälten. (Om ett fält F bara finns i en av tabellerna behöver man inte kvalificera fältet med tabellnamnet för att referera till det: tabell.F. Dock blir det tydligare att läsa koden om man talar om vilken tabell ett fält hör till.)
select
d.*,
n.owner_id,
day(d.datum) as dag
from
t_datum d inner join t_name n
on
d.parent_namn_id = n.id and
n.groupid in (234,345) and
d.datum = '20100219'
order by
dag
d är ett "alias" för t_datum sow definieras som så:
from
[b]t_datum d[/b] inner join [b]t_name n[/b]
Peter SMedlem sedan dec. 20025 483 inlägg Oops! :) Såg nu att jag blandat t med d på några ställen. Inlägg 7 är uppdaterat.
Mr TMedlem sedan maj 20071 061 inlägg Vi tar det från början, jag tror jag lurar mig själv.
d är alias för t_datum
n är alias för t_name
så långt är jag med, men var skapas t. t används ju bara plötsligt ? (eller är det när man skriver t.* som t blir namnet på den "sammanslagna" tabellen av d och n?)
Nu blev det lite förvirrat... Detta har hänt i ungefärlig kronologisk ordning:
Peter S skriver ett inlägg med ett mystiskt t.
Mr T skriver fel bokstav och undrar vad d är, när han menar t.
nitro2k01 missuppfattar frågan, missar Peters kodfel och svarar i all välmening att d är ett alias.
Peter S korrigerar sitt föregående inlägg och byter ut t mot d
Mr T undrar vad som står på.
Farbror najtro förklarar.
Mr TMedlem sedan maj 20071 061 inlägg Tack farbror najtro :-)
Det börjar klarna.
Mr TMedlem sedan maj 20071 061 inlägg Nu börjar saker funka. Inte undra på att jag hatar join när ni strular till det så för mig LOL
Skämpt åsido, det börjar klaran lite.