[PHP/SQL] Meest "geliked" items selecteren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ToySoldier1992
  • Registratie: September 2009
  • Laatst online: 29-08-2019
Hallo,

Ik ben op het moment bezig met extern data van een vBulletin forum te verzamelen. Dit kan niet met een hack helaas, komt omdat we geen toegang hebben tot de files op de desbetreffende server (lang verhaal, ik ga het even niet kort maken, is niet relevant :p)

Mijn tabel ziet er zo uit:

ty_id | ty_postid | ty_userid_thanked | ty_userid_thanker | ty_ip | ty_thread_id | ty_thread_title | ty_time
153 | 110855 | 5361 | 4787 | xxx | 8301 | Thread title | 2010-09-04 23:09:55
152 | 110838 | 9280 | 4787 | xxx | 8301 | Thread title 2 | 2010-09-04 23:09:55
151 | 110760 | 9280 | 4787 | xxx | 8200 | Thread title 3 | 2010-09-04 23:09:55

De bedoeling is dus op de meest gelikede posts te selecteren, soms afhankelijk van thread, soms van de user die de like stuurt (userid_thanked), soms van die wat het ontvangt (userid_thanker), soms van de posts, etc..

Mijn vraag is welke SQL code er is om erachter te komen welke postid, userid_thanked, userid_thanker of thread_id de meeste likes heeft (de meeste records in deze tabel). Ik heb namelijk geen idee hoe ik dit doe en omdat ik niet weet welke code ik hiervoor moet gebruiken gaat het Google'n ernaar vrij moeizaam, helaas.

Alle hulp is welkom.

- Wesley

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Zoals je het stelt hangt je like-ranking enkel af van het aantal records wat overeenkomt.

Dat zou je simpel kunnen doen door een count in je query op te nemen en daarop descending te sorteren lijkt me.

Acties:
  • 0 Henk 'm!

  • StephanVierkant
  • Registratie: Mei 2003
  • Laatst online: 08-09 16:22
Ongetest, maar zoiets?
SQL:
1
SELECT ty_postid, COUNT(*) as aantal FROM tabel GROUP BY ty_postid


Overigens groeten we elkaar op T.net permanent, dus je aanhef en groet zijn overbodig: Het algemeen beleid #groeten

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 11-09 13:55
Je post is enigszins verwarrend, gezien LIKE een MySQL statement is.
Maar je bedoeld dus dat in deze tabel voorkeursstemmen staan, en je het items met de meeste stemmen wilt weten.

Je kunt GROUP BY gebruiken met de kolom waarop je wilt selecteren, en een COUNT() om te bepalen hoeveel items dat betreft.
SQL:
1
SELECT ty_postid, COUNT(*) AS aantal FROM tabel GROUP BY ty_postid ORDER BY aantal DESC

Geeft een lijst met postID's op volgorde van meest ontvangen stemmen.

edit:
What he said :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

frickY schreef op maandag 06 september 2010 @ 00:39:
Je post is enigszins verwarrend, gezien LIKE een MySQL statement is.
FTFY. :P

[ Voor 3% gewijzigd door NMe op 06-09-2010 00:44 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • StephanVierkant
  • Registratie: Mei 2003
  • Laatst online: 08-09 16:22
En wellicht ten overvloede nog een tip aan TS: speel eerst een beetje in phpMyAdmin, da's wat gemakkelijk 'debuggen' dan gelijk in je php-file ;)

Acties:
  • 0 Henk 'm!

  • ToySoldier1992
  • Registratie: September 2009
  • Laatst online: 29-08-2019
@ frickY & Stephan4kant
Bedankt voor de suggesties/voorbeelden, is nu een beetje laat, zal ze morgen testen en laten weten of het gelukt is

@ Stephan4kant
Haha, zal volgende keer bij de post zelf houden :D

Overigens was ik al in phpMyAdmin een beetje aan het proberen met wat dingetjes, maar ik wist niet zeker welke functie ik moest hebben, ik ga deze suggestie(s) morgen eens proberen en kijken of het lukt :)

Alvast bedankt.

Edit
Code werkt, bedankt allemaal :-)

[ Voor 5% gewijzigd door ToySoldier1992 op 08-09-2010 17:22 . Reden: Zie edit ]

Pagina: 1