2015-02-20 2 views
0

У меня есть запрос ранга с левым соединением. Попытка ограничить результаты 3 строками, но вместо этого получить все результаты.MySQL LIMIT не работает/область

SELECT 
    CONCAT(users.name, users.surname) n, 
    total_time v, 
    1+(SELECT count(*) from app a WHERE a.total_time > b.total_time) r 
FROM app b 
LEFT JOIN users 
    ON b.user_id = users.user_id 
ORDER by total_time DESC 
LIMIT 3 

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

Запрос реагирует на DESC на ASC изменение, но на LIMIT val нет. Если изменить b.user_id к app.user_id - Он бросает #1054 - Unknown column 'app.user_id' in 'on clause'

Как ограничить это, чтобы получить 3 ряда в лучшем случае? Где я использую область LIMIT?

+0

Возможны ли [SQLFiddle] (http://sqlfiddle.com/)? – Phil

+0

Попробуйте этот ЗАКАЗАТЬ по a.total_time DESC – Yogesh

+1

Ошибка # 1054, потому что в таблице приложений уже есть ALIAS – Rigel1121

ответ

1

Запрос, который вы указали, будет возвращать не более трех строк. «Объём» в предложении LIMIT приведен в самом внешнем SELECT в запросе, который вы указали.

Мы могли бы настроить скрипт SQL для демонстрации, но вы можете так же легко проверить его. Вы не можете получить этот запрос, чтобы вернуть более трех строк.