[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выборка один ко многим
olya-kowka
Друзья, добрый день.

Помогите составить запрос, у меня какой-то ступор.

Есть таблица с изделиями tbl_items:

id_item (PK)
descr и т.д.

Каждое изделие id_item может содержать внутри себя от одного до нескольких камней. Существует таблица камней - tbl_stones. Разбивая эту связь М-М, образовалась таблица tbl_stones_item, которая имеет поля:

id_item
id_stone


Например, заполняю ее так:

1111 22
1111 33

Теперь я хочу выбрать информацию об изделии из tbl_items.


SELECT i.*, st.id_stone
FROM tbl_items i INNER JOIN tbl_stones_item st ON i.id_item = st.id_item
WHERE i.id_item = 1111;


Но получается в результате 2 строки, отличающиеся только полем st.id_stone. Оно и понятно, ведь 2 камня в изделии. Как мне создать выборку, чтобы для каждого изделия был 1 столбец , где через запятую можно было бы увидеть все камни, которые он содержит.

У меня не идет что-то ....




Спустя 1 час, 3 минуты, 9 секунд (15.09.2010 - 11:25) SlavaFr написал(а):
1) для перестроховки используй LEFT JOIN, так как по твоему расказу изделие может содержать камни.

2)в МySql можно попробывать group_concat(), но я предпочел бы зделать все при помощи скрипта.

Спустя 1 час, 24 минуты, 15 секунд (15.09.2010 - 12:50) olya-kowka написал(а):
SlavaFr, спасибо!

Про left join согласна.

За group_concat тоже спасибо, я о ней не знала.
Стала ее применять, она мне BLOB возвращает.

В итоге сделала так:


SELECT i.*, (SELECT concat( GROUP_CONCAT( id_stone ) )
FROM `tbl_stones_item`
WHERE `id_item` = i.id_item) AS `stones`
FROM tbl_items i
WHERE i.id_item = 1111;

Спустя 1 час, 16 минут, 25 секунд (15.09.2010 - 14:06) SlavaFr написал(а):
concat в общем был ненужен, так как BLOB в данном случае просто обычный стринг.

Спустя 56 минут, 45 секунд (15.09.2010 - 15:03) olya-kowka написал(а):
SlavaFr, понимаешь, он мне в столбце stones пишет не результат 22,33 , а так [BLOB 5 Байт].

Я нашла решение с помощью concat.

Спустя 33 минуты, 47 секунд (15.09.2010 - 15:37) SlavaFr написал(а):
так это он так наверное в твоей программе пишет в которой ты запрос делала, в php запросе он бы выдал то что надо.
С другой стороны преоброзование блоба в стринг с помощью concat, тоже о.к.

Спустя 15 минут, 8 секунд (15.09.2010 - 15:52) olya-kowka написал(а):
SlavaFr, это он мне пишет в phpMyAdmin. rolleyes.gif


Спустя 23 минуты, 37 секунд (15.09.2010 - 16:15) SlavaFr написал(а):
а в mysql_fetch_assoc писать не будет.


_____________
Столько дел...Не успеваю на все забить!!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.