Visa ett inlägg
Gammal 2003-06-25, 01:16   #1
hp
Senior Member
 
Reg.datum: Aug 2001
Ort: Stockholm, Sweden
Inlägg: 591
Skicka ett meddelande via ICQ till hp Skicka ett meddelande via MSN till hp
Standard Avancerad SQL fråga

Tjena!

Kanske fel forum att skriva i men jag kastar ut frågan ändå, någon kanske kan lösningen... Om Du inte kan något om databaser, ta dig inte äns tid att försöka förstå detta

Jag håller på att lösa ett SQL problem som var svårare att lösa än jag trodde.

Databasen ser ut som följer

- groups, innehåller information om olika grupper
- news, innehåller nyhetsinlägg, här finns en flagga som heter general, om den är satt så skall inlägget visas oavsatt vilken grupp man är inloggad i.
- groups_news, är en länklista mellan groupid och newsid

Jag skall nu göra en lista på alla nyhetsinlägg som är relevanta för den inloggade personenen, som har valt vilken grupp han är med i, dess utom om ingen grupp är vald skall bara de generella inläggen visas. Denna lista skall vara sorterad DESC efter changedate som finns i tabellen news.

Om vi struntar i JOINS och CROSS JOINS och kör den gammla hedliga vägen, jag har testat JOINS, det funkar precis lika dant, så borde en sådan sats med inloggning i grupp med id 1 se ut något som

Kod:
SELECT news.* FROM news, group_news WHERE news.general = 1 OR group_news.newsid = news.newsid AND group_news.groupid = 1 ORDER BY news.changedate DESC
Denna sats funkar finfint till dess att man skaffar mer än ett inlägg som är kopplad till samma grupp, då börjar nämligen alla inlägg som är generella duplicera sig så många gånger som det finns gruppanknytna inlägg. Rent SQL mässigt/matematiskt är detta rätt, WHERE satsen utvärderas för varje inlägg vilket kommer resultera i detta.

Någon som kan komma på en rätt och riktig sats för att åstatkomma det jag vill??



HP
Moderator Svenska 3D-Tåg
Regler
hp besöker inte forumet just nu