2012-03-05 3 views
2

Извините, если это действительно глупый вопрос. У меня есть таблица с тремя столбцами: id, user_id и article_id, которая представляет собой много-много отношений между таблицами пользователей и статей. Я использую PHP и MySQLО группировке результатов в SQL-запросе

Примера записи:

  • ID: 1 идентификатор_пользователь: 5 article_id: 6 (это означает, что пользователь 5 нравится статья 6)
  • ID: 2 идентификатор_пользователь: 1 article_id: 6
  • ID: 3 идентификатор_пользователя: 2 article_id: 1
  • ID: 4 идентификатор_пользователя: 3 article_id: 3

я хотел бы, чтобы результаты группы по статья и получить массив, как это:

array[6] = {5,1}; 
array[1] = {2}; 
array[3] = {3}; 

так я могу получить пользователей, которые любят каждую статью в удобном виде. Вопрос в том, что это лучший способ добиться этого? Любая помощь будет действительно оценена. Благодаря

+0

Какие СУБД вы используете? –

+0

Я использую PHP, Doctrine и MYSQL. Симфония будет более точной. Я знаю, что могу сделать это, итерируя результаты в php, но я не знаю, есть ли более простой способ, так как я не эксперт. Извините за мой английский и спасибо за ответ! – viktor77

ответ

2

Вы можете перемещаться по PHP стороне над результатами и группы в массив или использовать GROUP_CONCAT, а затем explode

+0

Спасибо Distdev, я не знал о втором способе, хотя кажется, что в Doctrine я не могу использовать group_concat. Я не упоминал об этом раньше, так что это моя ошибка. – viktor77

0

не будучи знаком с синтаксисом «Доктрина», если вы в состоянии обеспечить строку запроса, вы должны быть в состоянии получить результаты через

select article_id, group_concat(user_id) as LikedByUsers 
    from YourTable 
    group by article_id 

первый столбец будет иметь идентификатор статьи, а второй столбец ваш разделенный запятыми список пользователей, которые любят его.

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