webForumDet fria alternativet

Dubbla left join samt unique

5 svar · 408 visningar · startad av nitro2k01

nitro2k01Medlem sedan aug. 20039 342 inlägg
#1

Jag har en sida där man kan ladda ner musik och även betygssätta den. För att få ut en lista över låtarna använder jag följande SQL-fråga. Tabellen items innehåller listan över låtarna. Tabellen ratings innehåller en röst per rad, där en röst (ratings.value) innehåller en siffra 1-5, och koden nedan funkar korrekt för att få ut medelvärde av rösterna.

SELECT items.*, avg(value) AS item_ratings
FROM items
LEFT JOIN ratings ON items.itemid=ratings.itemid {$where} GROUP BY items.itemid
{$order}
{$dir} LIMIT 5;

Det som jag nu vill göra är att lägga till en funktion som räknar antalet klick. Så jag skapade en tabell, clicks, som innehåller kolumnerna IP, itemid och timestamp, där varje rad motsvarar ett klick. För att få ut antalet klick har jag kommit fram till följande fråga:

SELECT items.*, count(clicks.IP) AS item_ratings
FROM items
LEFT JOIN clicks ON items.itemid=clicks.itemid GROUP BY items.itemid
{$order}
{$dir} LIMIT 5;

Denna fråga funkar nästan som den ska. Det jag vill är dels att sätta ihop frågorna till en och dels att bara räkna varje IP-adress en gång.
Hjälp emottages tacksamt. :)

nitro2k01Medlem sedan aug. 20039 342 inlägg
#2

Inte likt mig kanske, men bump!
/r (Även lösningen till problemen var för sig skule uppskattas, samma peron behöver inte lösa båda problemen :) )

LarsGMedlem sedan dec. 200012 464 inlägg
#3
select items.*, 
 (select avg(value)
    from ratings
   where items.itemid=ratings.itemid),
  (select count(distinct ip)
     from clicks
    where items.itemid=clicks.itemid)
from ...
nitro2k01Medlem sedan aug. 20039 342 inlägg
#4

Funkade ju perfa. Men innan jag markerar svaret som slutgiltigt vill jag veta av ren kunskapstörst: Finns det något sätt att ha två olika join, och finns det någon mening med att ha det vid något tillfälle?

LarsGMedlem sedan dec. 200012 464 inlägg
#5

I ditt fall så går det inte att använda join.

nitro2k01Medlem sedan aug. 20039 342 inlägg
#6

Känns nästan som join är lite begränsat, eller? Jag har fortfarande inte förstått fullt ut hur man använder join.

130 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)