SQL Left Join - одни и те же результаты несколько раз - PullRequest
3 голосов
/ 04 августа 2011

У меня есть следующие таблицы:

пользователи

id |имя

информация

id |информация |user_id

(user_id из таблицы info является внешним ключом => подключается к id из таблицы users )

Возможно, что пользовательбудет иметь много записей в информационной таблице (один и тот же user_id во многих строках).

Теперь я хочу получить данные и отобразить их так:

username:

... info ....

Пример:

admin:

aaa

bbb

ccc

someuser:

ddd

eee

fff

Поэтому я использую LEFT JOIN вот так:

SELECT users.name, info.info
FROM users
LEFT JOIN info
ON users.id = info.user_id

Но я получаю следующее:

admin:

aaa

admin:

bbb

admin:

ccc

Как я могу отобразить имя пользователя только один раз?Я пытался использовать ключевое слово DISTINCT после SELECT, но это не помогло.Тем временем я решаю эту проблему внутри самого кода php, но есть ли способ исправить это только внутри sql?

Ответы [ 2 ]

4 голосов
/ 04 августа 2011
SELECT users.name, GROUP_CONCAT(info.info SEPARATOR 'whateveryouwant') as info
FROM users 
INNER JOIN info ON (users.id = info.user_id)
GROUP BY users.name

По умолчанию group_concat использует , в качестве разделителя, но вы можете изменить его при необходимости.

Ссылка:
http://dev.mysql.com/doc/refman/5.5/en/group-by-functions.html#function_group-concat

1 голос
/ 04 августа 2011
$lastname="";
$res=mysql_query($yourQuery);
while($row=mysql_fetch_assoc($res)){
    if($row['name']!=$lastname){
        $lastname=$row['name'];
        print $lastname.':'; // first time print it
    }
    print $row['info'];
}
...