SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.10.2007 00:59:34

Raolin
Участник
Зарегистрирован: 25.10.2007
Сообщений: 2

Объединение таблицы с большим числом записей на себя

Добрый день!
Возникла проблема. Есть таблица вида
Id товара | Название товара | Код товара | Код производителя

Код товара - уникален, код производителя - может быть одинаковымдля разных товаров (такие товары зовутся "аналогами").

Надо одновременно и выбрать записи из таблицы, и узнать, есть ли у них аналоги.

Делаю:

SELECT p.*, a.product_id as analog
FROM products as p
LEFT JOIN products as a ON (a.код_завода=p.код_завода AND a.product_id!=p.product_id)
GROUP BY p.product_id

Возникает проблема - в таблице около 60 000 записей, и когда таблица таким образом сама на себя джойнится, обработка запроса сильно затягивается. Что можно сделать в данной ситуации?
Заранее благодарю.

Неактивен

 

#2 25.10.2007 01:37:05

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Объединение таблицы с большим числом записей на себя

А что мешает сделать что-то типа
SELECT <разные поля>, GROUP_CONCAT(<поля аналогов>) as analogs
FROM table
GROUP BY <разные поля>

Если хотите делать через самообъединение - нужно, чтобы был хороший
индекс на таблице, который максимально будет использовать все ограничения.
Если ограничений нет (так, как Вы написали) - то хотя бы ключи, по которым
Вы объединяете таблицы.

Неактивен

 

#3 25.10.2007 01:53:51

Raolin
Участник
Зарегистрирован: 25.10.2007
Сообщений: 2

Re: Объединение таблицы с большим числом записей на себя

Ограничения есть. Там добавляется нечто вроде:

Название товара LIKE (%0445%)
AND
Код товара LIKE (%0445%)

Записи после выборки отправляются в php. Идет перебор, и если значение индекса $result['analogs'] есть NULL, то считается, что аналогов нет. Не совсем понял про GROUP_CONCAT. Если не сложно - поясните пожалуйста. Почитал документацию, не разобрался.

Неактивен

 

#4 25.10.2007 14:27:10

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Объединение таблицы с большим числом записей на себя

Пусть у Вас есть таблица вида
a | b
-----
1 | 1
1 | 2
2 | 1
2 | 2
2 | 3

Тогда
SELECT a, GROUP_CONCAT(b) as gc
FROM table GROUP BY a

выведет
a | gc
------
1 | 1,2
2 | 1,2,3

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson