JetboyMedlem sedan aug. 200133 inlägg 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 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
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 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