inspiroMedlem sedan sep. 2005664 inlägg 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'
Hjälp nån? Använder sql server.
emissionMedlem sedan dec. 19996 095 inlägg 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
inspiroMedlem sedan sep. 2005664 inlägg 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?
emissionMedlem sedan dec. 19996 095 inlägg
inspiro skrev:
Aha, ok ja en guest kan förstås vara bra!
Helt klart. Du slipper en massa undantagshantering i SQL-frågor, och på andra ställen.
inspiro skrev:
Är left join samma sak som left outer join?
Japp, det är bara en slarvigare syntax.