2016-02-26 2 views
0

Например, у меня много пользователей, каждый из них выбрал игру, которая им нравится, теперь в той же строке mysql, которую они рекомендуют (большие пальцы вверх). База данных примеров:Php, выбирающий один из каждого вида

(имя): Leonard, (рекомендует): 999, (игра): Mario; (Ник): Nikky (рекомендуется): 1999 (игра): Counter-Strike (ник): Сэм, (рекомендуется): 199, (игра): AION

Теперь то, что я хочу сделать выбирает наиболее рекомендуемого пользователя для каждой игры, не делая двойных запросов mysql, возможно ли это?

SELECT * FROM пользователей ORDER BY рекомендует DESC

Это просто показывает все из них, отсортированных по рекомендует сумму, но то, что я хочу, чтобы показать 1 с наиболее рекомендую для каждой игры, потому что есть много пользователей, которые имеют куча рекомендаций для той же игры.

ответ

2

Вы можете просто приписать GROUP BY к ORDER BY:

SELECT * FROM users GROUP BY game ORDER BY recommends DESC 

SqlFiddle demo

+0

Спасибо! это действительно простой и простой способ сделать это, а также любить так, как вы использовали sqlfiddie – EvilNabster

1

Вы можете использовать предложение GROUP BY для объединения нескольких записей на основе одного столбца и COUNT() для подсчета. Трудно не видя полную схему, но что-то вроде:

SELECT users.*, COUNT(users.recommends) AS total_recommends FROM users ORDER BY recommends DESC GROUP BY game

1

Вы можете использовать группу по.

SELECT users.*, MAX(user.recommends) AS maxrec GROUP BY game; 
+0

Довольно уверен, что MySQL ожидает, что 'GROUP BY' появится после' ORDER BY' в запросах, нет? –

+0

Когда я об этом думаю, я не помню. Прошло немного времени, так как я использовал MySQL – OZI

0

Если я понимаю, это кажется, что вы хотите:

SELECT * FROM users group by game ORDER BY recommends DESC 

group by делает, что только один пользователь за игру извлекается и order by извлекает пользователю высокий балл.