webForumDet fria alternativet

Hämta bara om det existerar

3 svar · 192 visningar · startad av Jetboy

JetboyMedlem sedan aug. 200133 inlägg
#1

Jag har en databas med tre tabeller tbl_users, tbl_a och tbl_b. Den förstnämnda tabellen innehåller användare, och de två övriga är tabeller för sådant som användarna själva kan lägga till. Tabellerna är länkade enligt tbl_users.us_id = tbl_a.a_id = tbl_b.b_id. Bland fälten i tabellerna finns också tbl_users.us_checked, tbl_a.a_checked och tbl_b.b_checked.

Jag vill hämta värdena från de tre checked-kolumnernerna. Problemet är att jag inte på förhand vet ifall det finns poster i tabellerna tbl_a och tbl_b som stämmer med tbl_users; jag kan alltså inte använda ...WHERE us_id = a_id = b_id... eftersom villkoret bara är uppfyllt om användaren har lagt något i tabellerna a och b.

Jag har testat INNER JOINs, IFNULL(a_checked, 0) och en massa andra grejer men jag får det bara inte att fungera. Är det någon som har ett tips är ni grymt välkomna att dela med er!

/Anders

UrMeMedlem sedan apr. 2001762 inlägg
#2

Innan du gör SQL frågan så gör nån if-sats där du kollar om det just det id:et finns i tabell tbl_a och tbl_b ... och gör olika SQL frågor utifrån det.

Vet inte om hur du lägger till medlemmarna. Annars kan du ju bara göra en "row" med det id:et när medlemmen signar upp sig så vet du ju att det id:et finns där.. även fast det inte står info i de övriga kolumnerna...

Kan säkert gå att lösa med sql på nåt sätt.. men jag kan inte :)

@ndersMedlem sedan juni 200032 969 inlägg
#3

Jag har testat INNER JOINs,

Det är en OUTER JOIN du skall använda dig av. Sök på det, och jag hoppas du finner. :)

Mvh,

JetboyMedlem sedan aug. 200133 inlägg
#4

Yes. så här blev resultatet:

SELECT 
    us_id, (IFNULL(!(us_checked), 0) | 
    IFNULL(!MAX(a_checked), 0) | 
    IFNULL(!MAX(b_checked), 0)) AS notChecked 
FROM tbl_users 
LEFT JOIN tbl_a 
    ON (us_id = a_id) 
LEFT JOIN tbl_b 
    ON (us_id = b_id) 
GROUP BY us_id";

Denna kod sammanställer checked-fälten i de tre tabellerna och visar med 1/0 om det finns något hos användaren som inte är checkat än. Koden hanterar även NULL-värden, och störs därmed inte om användaren inte har något i tabell a eller b.

Tack för hjälpen!

/a

135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)