2013-09-25 2 views
2

У меня есть две таблицы, где нужно выбрать данные изприсоединяющиеся строки с колонками MySQL

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

id email 
---------- 
1 email1 
2 email2 

настройки

usrid name value 
-------------------- 
1 set1  value1 
1 set2  value2 
2 set1  value1 
2 set2  value2 

и SQL, я использовал это

SELECT u.email, s . * 
FROM `sers` u 
INNER JOIN `settings` s ON u.id = s.usrid 
LIMIT 0 , 30 

, но я получаю

email name value 
------------------ 
email1 set1 value1 
email1 set1 value1 
email2 set2 value2 
email2 set2 value1 

есть ли способ, чтобы получить

email1 set1 value1 set1 value1 etc 
email2 set2 value2 set2 value2 etc 

из GROUP_CONCAT я попытался это

SELECT u.email, GROUP_CONCAT(s.name,s.value) as vals FROM `users` u INNER JOIN `settings` s ON u.id = s.usrid GROUP BY u.email 

который дал

email1 set1value1,set1value1 etc 

, как я могу сделать поставить разделитель между каждыми значениями между запятой

как

email1 set1=value1,set1=value1 etc 
+0

у них есть только максимум 2 настройки? –

+0

Присоединяйтесь к работам, если оба столбца идентичны. – Mihai

+0

@ 491243 нет, для каждого пользователя около 7 – Smith

ответ

1

Попробуйте эту скрипку:

http://sqlfiddle.com/#!2/782e3/6

SELECT u.email, CONCAT_WS(',', GROUP_CONCAT(s.name), 
       GROUP_CONCAT(s.value)) AS allValues 
FROM `user` u 
INNER JOIN `settings` s ON u.id = s.usrid GROUP BY email 
LIMIT 0 , 30 
2

Использование GROUP_CONCAT() и GROUP BY.

2
SELECT u.email, 
GROUP_CONCAT(s.name,'=' ,s.value SEPARATOR ',') 
FROM `user` u 
INNER JOIN `settings` s ON u.id = s.usrid 
GROUP BY u.email; 
Смежные вопросы