2013-04-02 2 views
2

У меня есть эта таблица:Mysql объединить строки

ip country 

1  A 
2  A 
3  B 
4  B 
4  B 

Я пытаюсь написать запрос, который будет возвращать что-то вроде:

A 1,2 
B 3,4 

Э.Г. SELECT * FROM table GROUP BY Возврат страны:

A 1 
B 3 

Но это не желаемый результат.

Ι может запустить этот простой запрос:

SELECT * FROM table ORDER BY ip 

и программным будет написать что-то вроде:

$c_ip=0; 
`while($row=mysql_fetch_array($result,MYSQL_ASSOC)){ 
if($row['ip'])!=$c_ip) 
{ 
$c_ip=$row['ip']; 
//new line!! 
}else 
{ 
//don't close <tr> code goes here 
} 
}` 
+0

Вы хотите, чтобы одна и та же страна была разделена запятой в строке. – rahularyansharma

+0

простой ответ: да –

+0

Возможный [Дубликат] (http://stackoverflow.com/questions/14065277/sql-select-multiple-rows-in-one-column) – Luv

ответ

9

Попробуйте это:

SELECT country, GROUP_CONCAT(DISTINCT ip SEPARATOR ',') AS ips 
FROM my_table 
GROUP BY country 

SQL Fiddle

+2

В соответствии с SQL Fiddle он не дает правильного ответ. (4 повторяется) – Luv

0

Попробуйте Query, вы можете использовать STUFF в SQL SERVER

SELECT 
    t1.country, 
    STUFF((
    SELECT distinct ', ' + cast(t2.ip as varchar) 
    FROM Table1 t2 
    WHERE t2.country = t1.country 
    FOR XML PATH ('')) 
    ,1,2,'') AS Names 
FROM Table1 t1 
GROUP BY t1.country; 

SQL FIDDLE

0

Попробуйте

   SELECT DISTINCT country, SUBSTRING(ConcateColumn,2,LEN(ConcateColumn)) 
    FROM Table t1 
    CROSS APPLY ( 
       select substring((SELECT ',' + ip 
        FROM Table t2 
        WHERE t2.country = t2.country 
        ORDER BY DescOfFault 
        FOR XML PATH('')),2,20000) 
        ) D (ConcateColumn) 
1

Вы можете добавить 'DISTINCT' линии всасывания IP, если вы не хотите, чтобы значение 4, чтобы повторить.

SELECT country, GROUP_CONCAT(DISTINCT ip SEPARATOR ',') AS ids 
FROM my_table 
GROUP BY country 
Смежные вопросы