Håller på med ett forum där både registrerade och ej registrerade kan skriva. De som skriver utan att vara registrerade (eller inte är inloggade) får -1 i UserID-kolumnen. Men när jag försöker hämta alla topics så lyckas jag inte få joinen att fungera, den som joinar ihop topics-tabellen med user-tabellen pga det här med de oregistrerade användarna. Den hämtar istället ut ALLA användare varje gång jag har en topic med -1 som UserID.
Så här nånting vill jag göra... alltså hämta alla topics och de användare som skrivit samt även de topics som inte har någon användare:
FROM ForumTopics INNER JOIN
Users ON ForumTopics.UserID = Users.ID OR ForumTopics.UserID = '-1'
Din JOIN-klausul säger att kopplingen mellan ForumTopics och Users ska vara att de har samma UserID, eller att ForumTopics.UserID är -1, vilket m.a.o innebär att alla rader i Users uppfyller kriteriet när ForumTopics.UserID=-1.
Det enklaste, och på många sätt bästa, sättet är att lägga in en Guest-user i User-tabellen, med UserID=-1. Självklart en User som man inte kan logga in som. På så vis bli Guest en fullvärdig medlem i User-arkitekturen, och man kan ge och ta bort rättigheter på ett kontrollerat sätt.
Rent SQL-mässigt löses JOIN-problemet:
FROM ForumTopics LEFT JOIN
Users ON ForumTopics.UserID = Users.ID
WHERE ForumTopics.UserID = '-1' OR Users.ID IS NOT NULL
Aha, ok ja en guest kan förstås vara bra! Inte så dumt att lära sig ett exempel på en left join heller förstås... tackar! :) Är left join samma sak som left outer join?