Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день!
Возникла проблема. Есть таблица вида
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 записей, и когда таблица таким образом сама на себя джойнится, обработка запроса сильно затягивается. Что можно сделать в данной ситуации?
Заранее благодарю.
Неактивен
А что мешает сделать что-то типа
SELECT <разные поля>, GROUP_CONCAT(<поля аналогов>) as analogs
FROM table
GROUP BY <разные поля>
Если хотите делать через самообъединение - нужно, чтобы был хороший
индекс на таблице, который максимально будет использовать все ограничения.
Если ограничений нет (так, как Вы написали) - то хотя бы ключи, по которым
Вы объединяете таблицы.
Неактивен
Ограничения есть. Там добавляется нечто вроде:
Название товара LIKE (%0445%)
AND
Код товара LIKE (%0445%)
Записи после выборки отправляются в php. Идет перебор, и если значение индекса $result['analogs'] есть NULL, то считается, что аналогов нет. Не совсем понял про GROUP_CONCAT. Если не сложно - поясните пожалуйста. Почитал документацию, не разобрался.
Неактивен
Пусть у Вас есть таблица вида
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
Неактивен