2015-09-29 4 views
0

Я видел много ответов, чтобы добавить серийный номер в простую таблицу, но здесь я хочу добавить серийный ключ к запросу соединения. Я попробовал этот запросДобавить серийный номер в MySQL join query

SELECT *,@c:[email protected]+1 AS serialNumber 
FROM 
(SELECT @c:= 0) AS c, 
(
    SELECT a.ai_id,a.ai_images,a.user_id,a.ai_like_count,a.ai_comment_count,a.ai_caption,u.display_name,u.first_name,u.email,a.ai_created 
    FROM album_images AS a 
    LEFT JOIN users AS u 
    ON a.user_id=u.user_id 
    WHERE u.email_validation=1 
    AND u.status=1 
    ORDER BY a.ai_created DESC 
) AS t 
WHERE 1 
GROUP BY user_id 
ORDER BY ai_created DESC 

Но я не получаю номер в правильном порядке, он становится как 1,5,8, как это. Я хочу так: 1,2,3,4

+0

Пожалуйста, измените свой вопрос и показать образцы данных и желаемые результаты. Не совсем понятно, что вы хотите. Вы также используете 'select' с столбцами, не включенными в предложение' group by'. MySQL явно предупреждает об этом. –

+0

Это очень большие таблицы и трудно описать, если вы можете рассказать мне, как добавить серийные номера в любой базовый запрос на присоединение? –

+0

Поместите 'group by' в подзапрос. Затем добавьте число во внешний запрос. Я не могу потворствовать вашему коду, потому что вы неправильно используете «group by». –

ответ

0

Попробуйте этот запрос

set @c=0; 
SELECT @c:[email protected]+1 AS serialNumber,tab.* 
FROM (
SELECT * FROM 
    (
    SELECT  a.ai_id,a.ai_images,a.user_id,a.ai_like_count,a.ai_comment_count,a.ai_caption,u.display_name,u.first_name,u.email,a.ai_created 
    FROM album_images AS a 
    LEFT JOIN users AS u ON a.user_id=u.user_id 
    WHERE u.email_validation=1 AND u.status=1 ORDER BY a.ai_created DESC) AS t GROUP BY user_id ORDER BY ai_created DESC 
) AS tab 
+0

Спасибо, я получил ответ из этого запроса –

1

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

SELECT *,@c:[email protected]+1 AS serialNumber 
    FROM 
    (SELECT @c:= 0) AS c, 
    (
     SELECT a.ai_id,a.ai_images,a.user_id,a.ai_like_count,a.ai_comment_count,a.ai_caption,u.display_name,u.first_name,u.email,a.ai_created 
     FROM album_images AS a 
     LEFT JOIN users AS u 
     ON a.user_id=u.user_id 
     WHERE u.email_validation=1 
     AND u.status=1 
     GROUP BY a.user_id 
     ORDER BY a.ai_created DESC 
    ) AS t 
+0

Спасибо за ответ, я получу серийный номер правильно, но ответ изменен, я не получаю ответ, что хочу. –

+0

@BasilPJoy: используйте фильтр согласно вашему требованию, или вы можете поместить весь запрос в подзапрос, сохраняя серию во внешнем запросе. –