ugrás a tartalomhoz

Subselect? - összetett lekérdezés

mice@gothart.hu · 2009. Ápr. 11. (Szo), 18.09
Sziasztok!

Drupal 5.x-et használok, s egy adatbázislekérésben szeretném a segítségeteket kérni!
Jelenleg a "user"-ek "node"-jaihoz kapott "ajánlásokat" összesíti a lekérés és a "user"-eket eszerint listázza:
SELECT
COUNT (ajanlas.nid) AS count, users.name
FROM users
LEFT JOIN node ON node.uid = users.uid
LEFT JOIN ajanlas ON node.nid = ajanlas
GROUP BY users.uid
ORDER BY count DESC
A cél az, hogy csak ahhoz a három "node"-hoz kapott ajánlásokat összesítse tagonként, amik ez adott tagnál a legtöbb "ajánlást" kapták.

Tehát van a Jani, a Béla userünk, a nodek és az ajánlások száma.

Jani:

Bla - 10 ajánlás
Blaa - 5 ajánlás
Blaaa - 3 ajánlás
Blaaaa - 2 ajánlás

Béla:

Ble - 10 ajánlás
Blee - 5 ajánlás

Az én lekérésem ezt hozná ki eredményül:

Jani - 20 ajánlás
Béla - 15 ajánlás

Viszont én azt szeretném, hogy az adott user(például Jani) csak a három legtöbb ajánlást kapott nodejának ajánlásai adódjanak össze; tehát Jani ajánlásainak számához azt írja ki, hogy: 18 (10+5+3)

Már több napja próbálkozom, de nem sikerült rájönnöm a megoldásra :)

Előre is köszönöm a segítséget!
 
1

Rossz kérdés?

mice@gothart.hu · 2009. Ápr. 11. (Szo), 20.43
Rosszul tettem fel a kérdést? :)
2

elnézést...

mice@gothart.hu · 2009. Ápr. 12. (V), 22.30
Az eredeti lekérés:

SELECT COUNT( ajanlas.nid ) AS count, users.name FROM users LEFT JOIN node ON node.uid = users.uid LEFT JOIN ajanlas ON node.nid = ajanlas.nid GROUP BY users.uid ORDER BY count DESC

(egy nid lemaradt.)
3

Csak hogy tisztázzuk: a

drifter · 2009. Ápr. 13. (H), 08.42
Csak hogy tisztázzuk: a "Bla", "Blaa", "Blaaa" ebben a példában Jani által írt node-ok, amit más felhasználók ajánlanak?
4

Igen :-)

mice@gothart.hu · 2009. Ápr. 14. (K), 14.03
Igen :-)
5

Először ki kell válogatnod

vastagl · 2009. Ápr. 14. (K), 20.04
Először ki kell válogatnod csoportonként az első n sort:
ha van már egy ilyen táblád pl : node3

nev, ajanlasok_szama, nid
Jani 10 bla
Jani 5 blaa
Jani 3 blaaa
Jani 2 blaaaa
Béla 10 ble
Béla 5 blee

akkor a node3 descartes szorzatából: from node3 t1 , node3 t2
le tudod válogatni nevenként az első 3 legnagyobb szavazatot . (Bélánál csak kettő lesz)

select t1.*  from node3 t1 , node3 t2
where t1.nev=t2.nev
and t1.ajanlas_szama <=t2.ajanlas_szama
group by t1.nev,t1.ajanlas_szama
having count(*)     <= 3
 
Úgy látom itt akadtál el.