Permalänk

SQL-problem, hjälp!!!

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

t_kallor
artikelid | lank | likes
1 | http://hfjsadfsdajfsa.com | 23
1 | http://hfjsadfsdajfsa.se | 45
2 | http://hfjsadfsdajfsa.net | 11
2 | http://hfjsadfsdajfsa.biz | 7
2 | http://hfjsadfsdajfsa.info | 14
3 | http://hfjsadfsdajfsa.org | 3

Det jag skulle vilja få returnerat är följande:

amne | artikelid | lank | likes
Natur | 1 | http://hfjsadfsdajfsa.se | 45
Hjarnan | 2 | http://hfjsadfsdajfsa.info | 14
Teknik | 3 | http://hfjsadfsdajfsa.org | 3

Som ni säkert ser så är de bara de bara de populäraste artiklarna som kommer fram. Jag har försökt med joins och får fram detta:
Natur | 1 | http://hfjsadfsdajfsa.com | 23
Natur| 1 | http://hfjsadfsdajfsa.se | 45
Hjarnan | 2 | http://hfjsadfsdajfsa.net | 11
Hjarnan | 2 | http://hfjsadfsdajfsa.biz | 7
Hjarnan | 2 | http://hfjsadfsdajfsa.info | 14
Teknik | 3 | http://hfjsadfsdajfsa.org | 3

Det är dem rader med minst likes jag vill ta bort. All hjälp uppskattas...

Permalänk
Inaktiv

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

Permalänk
Medlem

select max(likes) from tabel_namn order by likes desc limit 1

Permalänk
Skrivet av anon150287:

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

Ja detta är egentligen inte de namnen jag använder på min riktiga databas jag bara hittade på dessa för att göra konceptet tydligt

Permalänk
Skrivet av vajjan:

select max(likes) from tabel_namn order by likes desc limit 1

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:

Natur | 1 | http://hfjsadfsdajfsa.se | 45
Hjarnan | 2 | http://hfjsadfsdajfsa.info | 14
Teknik | 3 | http://hfjsadfsdajfsa.org | 3

Permalänk
Medlem
Skrivet av anders.sjoberg:

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:

Natur | 1 | http://hfjsadfsdajfsa.se | 45
Hjarnan | 2 | http://hfjsadfsdajfsa.info | 14
Teknik | 3 | http://hfjsadfsdajfsa.org | 3

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.

Skickades från m.sweclockers.com

Visa signatur

Kom-pa-TI-bilitet

Permalänk

Tack så jättemycket detta var till mycket stor hjälp.