2015-02-22 2 views
0

Я кодирую поисковик фильма под названием Movieovo, я хочу выбрать лучшие 5 строк (ссылки на фильмы) из каждой группы (название фильма), но я встретился с проблемой в этом SQL запрос:MySQL пользовательская переменная добавление: '+1' return '+2'

SELECT link_movie_id, link_id, 
     @num := if(@link_movie_id = link_movie_id, @num + 1, 1) as row_number, 
     @link_movie_id := link_movie_id as dummy 
     FROM link GROUP BY link_movie_id, link_id HAVING row_number <= 5 LIMIT 30 

Результат: (Слишком много символов, так что я загрузить как изображение) http://i.imgur.com/phFzUF1.png

Вы можете увидеть "row_number" не +1 каждый раз

Я попробовал прямо в командной строке MySQL, показывает мне то же самое res Ульты, может ли кто-нибудь мне помочь? Я уже потратил 5 часов на эту проблему.

+0

Измените свой вопрос с помощью некоторых данных образца? – Mihai

+0

Странно, что произойдет, если вы попробуете @ num: = if (@ link_movie_id = link_movie_id, @ num + 0.5, 1) в качестве row_number –

+0

Добавьте 'JOIN (SELECT @num: = 0) x', чтобы получить инициализацию @num. –

ответ

0

Вы увеличиваете значение link_movie_id на 1, но вы группируете link_movie_id и link_id. С эффектом для некоторого link_movie_id в результате есть несколько значений link_id. Если вы хотите получить то, что ищете, либо сгруппировать по одному полю, либо увеличить его на основе конкатенированной комбинации link_movie_id и link_id.

Смежные вопросы