Глючит Mysql запрос или мой мозг

TrAxeX91

Создатель
Регистрация
31 Мар 2009
Сообщения
28
Реакции
2
Здравствуйте. Хочу задать вроде бы простой вопрос.

делаю запрос: $max = $this->q("SELECT DISTINCT (login) FROM `operations` ORDER BY `plus` DESC LIMIT 10");

Этот запрос выбирает уникальные логины пользователей по значению plus (это сколько выиграл пользователь). В итоге должно выводится ТОП 10 пользователей, выигрышь (plus), которых расположен по убыванию. Но этого не происходит, ORDER BY `plus` как будто не действует.

Спасибо.
 
$max = $this->q("SELECT DISTINCT (login) FROM `operations` ORDER BY `plus` DESC LIMIT 10 OFFSET 0");
или
$max = $this->q("SELECT DISTINCT (login) FROM `operations` ORDER BY `plus` DESC LIMIT 0,10");
 
Не работает:( На DESC нету реакции по прежнему:(
 
Не работает:( На DESC нету реакции по прежнему:(
Ну если я правильно понял $max это массив имён пользователей и тебе нужно, что б они были отсортированы в порядке обратном их выигрышу...
При этом сортировка мускул запроса DESC не пашет... А ASC сортировка работает?
если да, то просто примени к массиву $max функцию krsort($max);
 
Сейчас попробую обьяснить по подробней.

Структура таблицы operations:
id plus login
1 100 moser
2 500 maxim
3 900 digl
4 300 maxim
5 400 digl

Таблица служит в роли истории игр. Plus - означает сколько человек выиграл. Мне нужно сделать список ТОП 10 игроков, которые выиграли самые большие суммы, достать этот список нужно непосредственно из таблицы operations.

Я делаю вроде бы стандартный запрос:
SELECT DISTINCT (login) FROM `operations` ORDER BY `plus` DESC LIMIT 0,10

Который достанет уникальные логины, у которых самый большой выигрышь. Но почему то этот запрос не работает, логины все равно расположены как попало (но выводятся как уникальные).

Добавлено через 15 минут
SELECT DISTINCT (plus) FROM `operations` WHERE login<>'' ORDER BY `plus` DESC LIMIT 0,10"

Этот запрос хорошо работает, но как сюда впихнуть, чтобы логин еще выбирался?
 
а попробуй так:
SELECT login FROM `operations` GROUP BY `login` ORDER BY `plus` DESC LIMIT 0,10
 
Сделайте тип поля plus - integer. Возможно тип стоит varchar или еще какой-нибудь другой.

А вообще неплохо было бы указать тип всех полей и привести тестовую выборку из того, что есть в базе данных и того, что получается при выборке.
 
SELECT login, MAX(plus) FROM `operations` GROUP BY login ORDER BY 2 DESC LIMIT 10
или
SELECT login, MIN(plus) FROM `operations` GROUP BY login ORDER BY 2 DESC LIMIT 10
в зависимости хочешь выбирать минимальный или максимальный выигрыш пользователя за 1 игру, а если нужно за все время - то
SELECT login, SUM(plus) FROM `operations` GROUP BY login ORDER BY 2 DESC LIMIT 10
Думаю тебе подходит 1-й запрос
 
Назад
Сверху