select news.id,news.headline,news.text
from news join news_selection
on news.category_uid = news_selection.category_uid
where uid = 4711
Med reservation för feltolkning av olika kolumners innebörd.
Flyttas från Mysql.
9 svar · 383 visningar · startad av Joakim
Hellu,
Följande problem klurar jag lite på, exempel:
Vi har tre tabeller, en med nyheter med fält för tid, unikt id, rubrik, text och nyhetskategori samt en tabell med användarnas val av vilka nyhetskategorier de vill bevaka.
Tabell 'news':
ID
UID
CATEGORY_UID
HEADLINE
TEXT
Tabell 'news_selections':
ID
UID
USER_UID
CATEGORY_UID
Tabell 'news_category':
ID
UID
NAME
Kan jag göra någon form av select som väljer de nyhetsartiklar som ligger i någon av de kategorier som användaren valt att prenumerera på?
Annars kan jag tänka mig att man kan loopa igenom 'news_selections' och låta mitt script bygga en selectsats och lägga till de kategorier som en viss användare valt. Detta blir dock en bamseselect som jag inbillar mig att man gärna slipper. Och jag vill ju ha allt så dynamiskt som möjligt för att enkelt kunna lägga til / ta bort t.ex. kategorier.
Upplys mig =)
select news.id,news.headline,news.text
from news join news_selection
on news.category_uid = news_selection.category_uid
where uid = 4711
Med reservation för feltolkning av olika kolumners innebörd.
Flyttas från Mysql.
Om databashanteraren är MySQL så köper den inte att bara skriva "join", utan du måste definiera vilken join du gör: "left, inner, right osv".
Så står det inte i deras dokumentation. Sickna enar.
LarsG skrev:
Så står det inte i deras dokumentation. Sickna enar.
Då ljuger de. ;)
Jag har vid flertalet tillfällen fått fel i 3.58 på grund av detta. Sedan när jag skrivit ut vilken typ av join jag vill göra har det fungerat.
select * from GroupUser g
inner join User u
on g.userId = u.userId
Ger ett väntat resultat på mina testtabeller
select * from GroupUser g
join User u
on g.userId = u.userId
Ovanstående ger:
You have an error in your SQL syntax near 'ON g.userId = u.userId' at line 3
Detta kanske är en sugit lösning men något i denna stil:
SELECT * FROM news WHERE CATEGORY_UID = (SELECT CATEGORY_UID FROM news_selections WHERE USER_UID = X)
Slö men enkel lösning.
X är användar id:t
Den lösningen fungerar inte i Mysql. Dessutom så är det bättre med in än = i detta fall.
Jag vet inte om jag var otydlig =) men det finns ett antal kategorier, sport, inrikes, nöje osv. det jag vill kunna göra är att lista de nyheter vars kategori är någon av de som som den aktuell användare valt och som finns. Så om användare 01 har valt kategori 02 och 03 för att förenkla det hela så ska selecten välja de nyheter som finns i kategori 02 och 03. har för mycket feber för att förklara det här vettigt *sucka* det är nog enklare än vad jag får det till dock =)
Vad är det för problem med den fråga som jag föreslog?
Nejdå, mina exempel var ju klart förenklade, men med lite eftertanke så var det ju egentligen inte så svårt. Fokuserade nog bara på fel tänk =)
Tack!