Добрый день! Необходим совет хабрасообщества по реализации вывода информации из БД.
Один из наших клиентов разработал БД запчастей. БД спроектирована изначально достаточно плохо. Клиент предоставляет CSV, из которого мы формируем показ данных из БД в вебе.
Одна и та-же запчасть может находится в нескольких магазинах, но в базе сделаны не дополнительные поля, а реализовано следующим образом:
entityId_1 | entityId_2
это не плохо спроектированная связь, а вполне себе 'многое ко многому'.
Ваш вопрос очень плохо сформулирован.
Что-то вроде:
Привет, у нас есть функция для работы с юникодом, а данные по количеству покупок хранятся в redis. Как лучше всего сделать голосовалку для пользователя?
Выбираем список всех id магазинов, кешируем.
SELECT * FROM `table` WHERE podnomer = '010-21032-050';
Получается, что мы получили все в которых есть. Те, в которых нет получаем из кеша простой php функцией.
Но без нормализации, связей и прочего паршиво. И виноват тут тот, кто проектировал mysql бд, а не csv. Видили бы вы что я из csv лепил.
Пример:
Список всех складов: array(1,2,3,4,5,6) (SELECT DISTINCT(magazin) FROM table)
Список складов на которых есть: array(2,6,1) (SELECT * FROM `table` WHERE podnomer = '010-21032-050';)
Как вывести это в табличку, есть/нет? Элементарно.
Понятно, к сожалению, приходится работать с тем что есть, клиент базу перепроектировать уже не может — тк на нее многое завязано. В общем, как всегда все :) Спасибо за помощь, сейчас будем пробовать.
как я понял:
database.shop (shop_id, name, ...)
database.product (product_id, name, ...)
database.products_shop (product_id, shop_id)
Выборка сколько product_id в каждом shop_id достаточно тривиальна. Только вот актор не предоставил схему.
PS: Ваш запрос не решает туманную задачу:
product_name | склад 1 (есть/нет) | склад 2 (есть/нет) | склад 3 (есть/нет)
И не понятно зачем тут группировка с конкатенацией.
Как раз эту задачу он и решает: запрос отдаст выборку из двух колонок, в первой будет ид товара, а во второй список магазинов где такие есть, через запятую.