MySQL преброяване за класация

_PHP_

Registered
Ситуацията е следната:
Трябва да направя класация на потребители. Работата е там, че определящия фактор е едно поле. За по-ясно ще дам пример:

Иван е с ID 1.
Той е поканил 10 човека в сайта.
Всеки от тези 10 човека има поле PokanenOtId, в което поле ще се запише ID 1, понеже това е ID-то на Иван, който ги е поканил.

Петър е с ID 2.
Той е поканил 8 човека.
Полето PokanenOtId съдържа ID 2 и при 8-те потребителя, понеже са поканени от Петър, чието ID е 2.

Класацията трябва да изглежда така:

Иван - 10
Петър - 8

ПП: Искам да добавя, че не става дума за разни спамерски сайтове и т.н.
С горе описаната ситуация давам нагледен пример на това, което искам да реализирам.

Благодаря предварително.
 
Трябва да направя класация за всички потребители. Не само за Иван.
Също няма логика да броя ID, трябва да COUNT-вам PokanenOtId, но не знам как да го комбинирам, че да изведе класация за всички регистрирани потребители.
 
_PHP_ каза:
Трябва да направя класация за всички потребители. Не само за Иван.
Също няма логика да броя ID, трябва да COUNT-вам PokanenOtId, но не знам как да го комбинирам, че да изведе класация за всички регистрирани потребители.
Е погледни - да кажем в дб-то имаш 15 записа в които иван е поканил по 1 човек -> поканил е общо 15 човека тоест преброяваш на тези 15 ид-тата и ги извеждаш.
 
SELECT PokanenOtId, count(id) as broi FROM table GROUP BY PokanenOtId ORDER BY broi DESC

Ще ти изкара ID - брой поканени
След това може да вземеш username-а от този ID или направо в полето PokanenOt да записваш потребителското име, иначе трябва да добавиш нещо такова:
SELECT t1.username, COUNT(t2.id) as broi FROM table AS t2 LEFT JOIN table AS t2 ON t2.PokanenOtId= t1.id GROUP BY t2.PokanenOtId ORDER BY broi DESC
 
raiden каза:
SELECT PokanenOtId, count(id) as broi FROM table GROUP BY PokanenOtId ORDER BY broi DESC

Ще ти изкара ID - брой поканени
След това може да вземеш username-а от този ID или направо в полето PokanenOt да записваш потребителското име, иначе трябва да добавиш нещо такова:
SELECT t1.username, COUNT(t2.id) as broi FROM table AS t2 LEFT JOIN table AS t2 ON t2.PokanenOtId= t1.id GROUP BY t2.PokanenOtId ORDER BY broi DESC

Благодарско!
 

Back
Горе