Jump to content

IMDb

Newbie
  • Posts

    3
  • Joined

  • Last visited

Posts posted by IMDb

  1. Доброго времени суток.

    Есть прайс-листы в Excel нужно конвертировать в HTML.

    Прайс листы все разные, от разных поставщиков.

    При создании сводного прайса от поставщиков для своего интернет-магазина использую программу iNETsHOP, ее можно настроить под структуру каждого прайса и залить все товары прайс-листов в общую базу данных

    inetshop_inport_schemas_800.jpg

    ​потом в ней легко объединять дубли товаров от разных поставщиков или по названиям или по артикулам

    inetshop_tires_compare_800.jpg

  2. я лично считаю что нельзя так жестко делать привязку одного к другому, в битриксе есть нечто подобное, например невозможно удалить пользователя не удалив предварительно все его заказы и все что с ним связано - и это бесит если честно.

    Вся суть релляционных баз данных состоит как раз в этом. Если вы не можете в ЦМС магазина скрыть товар который вышел из оборота чтоб она не мешал - это недоработка самой ЦМС. Если вы хотите чтобы при удалении товара удалялись все записи в других таблицах (заказы например) - то настройте автоматическое удаление в самой СУБД. Или на крайний случай обнуление ссылающегося поля.

  3.  

    В этом случае сработает один или два и три условия а мне надо чтобы сработали только три условия показать товары которые отвечают всем трём или не показывать этот товар

    Как то вы заморочились ...

     

    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 и тогда шаманить и прыгать по принесенному результату селект, но это больше похоже на го...код(мне кажется).

    Как бы Вы поступили на моем месте, спасибо всем за мнение!!!

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

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy