Hej allihopa!
Sitter nu och kodar på en sida då jag vill plocka ut den bästa artikeln till det ämnet artikeln handlar om. Men jag vet inte riktigt hur jag ska göra det. Jag har lyckats men på ett väldigt ineffektivt sätt. Några förslag? All hjälp uppskattas...
Detta är mina tables
t_artiklar
amne | artikelid
Natur | 1
Hjarnan | 2
Teknik | 3
SELECT * FROM `t_kallor` INNER JOIN `t_artiklar`ON (`t_kallor`.`artikelid` = `t_artiklar`.`artikelid`) WHERE `t_kallor`.`likes` > 10 ORDER BY `t_kallor`.`likes` DESC;
Nu får du alla med mer än 10 gillningar, i fallande ordning sorterat efter antal gillningar. Eller si kan du tabort WHERE delen och lägga till LIMIT 10 efter ORDER BY delen för att få de 10 bästa gillande artiklarna.
Dock är din databas uppbyggd (namngiven rättare sagt) väldigt konstigt... t_artiklar borde väl hela t_amnen och ha amne_id. Och sen borde t_kallor vara döpt till t_artiklar. Döp gärna dina saker på engelska i framtiden med, det hjälper oss alla
Dock är din databas uppbyggd (namngiven rättare sagt) väldigt konstigt... t_artiklar borde väl hela t_amnen och ha amne_id. Och sen borde t_kallor vara döpt till t_artiklar. Döp gärna dina saker på engelska i framtiden med, det hjälper oss alla
Tack för svaren uppskattas väldigt mycket det har hjälpt mig en god bit men är inte riktigt vad jag letar efter. Det jag vill ska returneras är den populäraste källan till varje artikel i ett query. Ungefär såhär:
Tack för svaren uppskattas väldigt mycket det har hjälpt mig en god bit men är inte riktigt vad jag letar efter. Det jag vill ska returneras är den populäraste källan till varje artikel i ett query. Ungefär såhär:
En av de bättre lösningarna är förmodligen att skapa en inre tabell där du plockar ut id samt maxvärde med en grupp:
SELECT artikelid, MAX(likes) AS maxlikes
FROM t_kallor
GROUP BY artikelid
Eftersom det inte finns något unikt id för varje rad i tabellen t_kallor måste man jämföra mot två kolumner för att få ut likes
SELECT amne, t_artiklar.artikelid, lank, maxlikes
FROM t_artiklar
INNER JOIN (SELECT artikelid, MAX(likes) AS maxlikes
FROM t_kallor
GROUP BY artikelid) iq
ON iq.artikelid = t_artiklar.artikelid
INNER JOIN t_kallor
ON t_kallor.artikelid = iq.artikelid
AND t_kallor.likes = iq.maxlikes
Där har du grundtanken, kan tyvärr inte testa om det fungerar då jag sitter ute i obygden.