-
Posts
3 -
Joined
-
Last visited
Content Type
Profiles
Forums
Calendar
Store
Posts posted by IMDb
-
-
я лично считаю что нельзя так жестко делать привязку одного к другому, в битриксе есть нечто подобное, например невозможно удалить пользователя не удалив предварительно все его заказы и все что с ним связано - и это бесит если честно.
Вся суть релляционных баз данных состоит как раз в этом. Если вы не можете в ЦМС магазина скрыть товар который вышел из оборота чтоб она не мешал - это недоработка самой ЦМС. Если вы хотите чтобы при удалении товара удалялись все записи в других таблицах (заказы например) - то настройте автоматическое удаление в самой СУБД. Или на крайний случай обнуление ссылающегося поля.
-
В этом случае сработает один или два и три условия а мне надо чтобы сработали только три условия показать товары которые отвечают всем трём или не показывать этот товар
Как то вы заморочились ...
SELECT DISTINCT *FROM table t1LEFT JOIN table t2 ON (t2.product_id = t1.product_id)LEFT JOIN table t3 ON (t3.product_id = t1.product_id)WHERE t1.id_propertie = 100 AND t1.select_value = 2 AND t2.id_propertie = 200 AND t2.select_value = 1 AND t3.id_propertie = 300 AND t3.select_value = 8
Если таблица товаров большая, то по идее может быть имеет смысл использовать EXISTS, например
SELECT * FROM table t
WHERE
EXISTS (SELECT 1 FROM table t1 WHERE t.product_id = t1.product_id AND t1.id_propertie = 100 AND t1.select_value = 2)
AND EXISTS (SELECT 1 FROM table t2 WHERE t.product_id = t2.product_id AND t2.id_propertie = 100 AND t2.select_value = 2)
AND EXISTS (SELECT 1 FROM table t3 WHERE t.product_id = t3.product_id AND t3.id_propertie = 100 AND t3.select_value = 8)
заодно уберем DISTINCT.
Если пары id_propertie и select_value встречаются только по одному разу, можно сделать через подзапрос
SELECT product_id FROM table t
WHERE
(
SELECT product_id FROM table t1
WHERE
(t1.product_id AND t1.id_propertie = 100 AND t1.select_value = 2)
OR (t1.product_id AND t1.id_propertie = 100 AND t1.select_value = 3)
OR (t1.product_id AND t1.id_propertie = 100 AND t1.select_value = 8)
HAVING count(product_id) =3
) t2
WHERE t.product_id = t2.product_id
чтобы не открывать новую тему, дополню свой вопрос.
селект, который я вояю будет достаточно громоздкий, и еще он будет использовать LIMIT по количеству товаров показываемых на странице.
к этому хозяйству, хотелось бы показать пользователю, сколько товаров нашлось по его запросу.
использовать mysqli_num_rows не могу из за LIMIT (всегда максимальное число будет равняться этому ограничению), а использовать count(*) значит нагрузить сервер еще раз этим сложным запросом, можно не использовать LIMIT и тогда шаманить и прыгать по принесенному результату селект, но это больше похоже на го...код(мне кажется).
Как бы Вы поступили на моем месте, спасибо всем за мнение!!!
Если требуется показать колоичество записей в выборке, но не хочется выполнять громоздние запросы два раза - сохраните результат поиска во временной таблице, в пользователю покажите таблицу из нее и количество записей в ней.
Excel в HTML
in Job
Posted
При создании сводного прайса от поставщиков для своего интернет-магазина использую программу iNETsHOP, ее можно настроить под структуру каждого прайса и залить все товары прайс-листов в общую базу данных
потом в ней легко объединять дубли товаров от разных поставщиков или по названиям или по артикулам