Вывод запроса в одну стоку

Tikrim

Guest
Вывод запроса в одну стоку

Приветствую.

есть таблица metro
id|name|
записи такие
1|Речной воклаз|
2|Комсомольская|
т .д.

Таблица account
id|metro_id|
записи такие
1|:1:2:3:4:5:|
2|:4:8:10:15:45:|

сделал запрос
select m.name from account as a left join metro as m on (a.metro_id REGEXP concat('%:',m.id,':%'))

Получил вывод
1|Речной вокзал|
1|Комсомолькая|
1|еще метро
1|еще метро
2|Речной вокзал|
2|Комсомолькая|

и т.д.

Помогите сделать запрос чтоб станции метро были в одной строке и через запятую, например так
1|Речной вокзал, Комсомолькая, т.д.
2|Речной вокзал, Комсомолькая, т.д.

Всем большое спасибо
 

Verk

Guest
В таблице account поле metro_id сделать числовым, делать запрос типа

select m.name from account as a left join metro as m on a.metro_id = m.id

результат обработать PHP-шкой
 

Tikrim

Guest
Для таблицы account может быть несколько станций метро
а твой запрос только для одной станции.
 

Tikrim

Guest
Я почти решил задачу осталось только обнулить переменую @a во премя запроса, кто знает как, подскажите.

set @a = '';
select if (locate(m.name,@a),обнуляем переменую,0), @a := concat_ws(', ',@a,m_name) from account left join metro on (a.metro_id REGEXP concat('%|',m.id,'|%'));
 

fixxxer

К.О.
Партнер клуба
сделал то может и сделал, только криво. :)

Объясню поподробнее мысль Verk'а.

Хранить в одном поле что-то вроде 1:3:5:6 - в корне неправильно. Проще говоря - через задницу. :)

Делай так:

Таблица account
id|metro_id
1|1
1|2
1|3
2|4
2|8
2|10

После этого делаешь так:

Вариант 1: делаешь как сказал Verk, обрабатываешь результат в php.

Вариант 2: такого рода запрос -

select
@a:='',@c:=-1;

select @a:=if(@c=m.id, concat_ws(',',@a,m.name),m.name),
@c := m.id
from account as a
left join metro as m on a.metro_id = m.id
order by m.id;

Вообще, это не совсем то, нужен не order, а подобие group by, но чтобы вывести не первые а последние строки... над этим подумай сам, мне уже лениво. :)
 

Tikrim

Guest
А если таблиц как metro у меня несколько штук, то что делать?
 

chira

Новичок
Для каждой станции (или ветки) метро своя таблица?
Сделай одну таблицу для metro.
 

Tikrim

Guest
Есть таблицы metro, pond, service и еще 3 штуки
всего 6
 

chira

Новичок
попробуй это:
Код:
create table cs (id int, str varchar(20));
insert into cs values (1,'a'),(1,'b'),(2,'c'),(2,'c'),(2,'d');
select * from cs;
set @mid:=0;
set @s:='';
create temporary table tt as
 select if(@mid=id,@s:=CONCAT(@s,str),@s:=str) strsum
   , @mid:=id id
 from cs
 order by id;
select max(strsum),id from tt group by id;
может натолкнет на мысли ...
 
Сверху