• Как отправить сайту, что я не со смартфона в WebView?

    Chvalov
    @Chvalov
    Антон Вертов, скажите что за сайт
    я скажу точно каким образом происходит детект
    Возможно расширение экрана
  • Как работать с множеством прайс-листов в БД MySQL?

    Chvalov
    @Chvalov Автор вопроса
    sim3x, MPTT это и есть Nested Sets, для удобства выборки, построения дерева, хлебные крошки, намного лучше чем в том-же opencart

    А как с производительностью Json в MySQL 5.7 ?
    С подобной
    структурой
    [
            {"name": "Parent 1",
                "child": [
                    {"name": "Child 1-1"},
                    {"name": "Child 1-2"},
                    {"name": "Child 1-3"}
                ]},
            {"name": "Parent 2",
                "child": [
                    {"name": "Child 2-1"},
                    {"name": "Child 2-2"},
                    {"name": "Child 2-3"
                        ,"child": [
                        {"name": "Child 2-3-1"},
                        {"name": "Child 2-3-2"}                 
                        ]
                    }
                 ]
            }       
        ];


    В будущем возможно перейду на PostgreSQL, пока в планах MySQL + memcached
  • Как работать с множеством прайс-листов в БД MySQL?

    Chvalov
    @Chvalov Автор вопроса
    sim3x, Категории - Nested sets
    status -- можно переназвать в active (Если нужно будет скрыть категорию)
    top -- для отображения категории в блоке "Популярные категории"


    По поводу характеристик, реализация будет на подобии OpenCart (ERD)
    выборка будет уже при открытии самого товара

    Для работы с прайсами характеристики и атрибуты товара не нужны
  • Как работать с множеством прайс-листов в БД MySQL?

    Chvalov
    @Chvalov Автор вопроса
    sim3x, Да, будет 2 языка, в процессе работы не планируется расширять языковый диапазон

    Под перевод попадают: Категории товаров, Блог (Новости/Акции),
    Из перевода товаров, планируется лишь характеристики и описание
    Для этого будет создана еще одна таблица product_details и связь товар и язык

    Названия не планируются к переводу
  • Как работать с множеством прайс-листов в БД MySQL?

    Chvalov
    @Chvalov Автор вопроса
    sim3x, Да есть мультиязычность и товар в нескольких категориях, но не думал что это нужно указывать для реализации работы с прайсами, извиняюсь!
  • Как работать с множеством прайс-листов в БД MySQL?

    Chvalov
    @Chvalov Автор вопроса
    sim3x, смотрите: Импортирую прайс, в product_supplier пишу SKU (mpn_number), склад и кол-во на складе использую INSERT INTO ... ON DUPLICATE KEY UPDATE
    Актуальные цены пишу в product_price
    price - Актуальная цена с прайс листа
    supplier_id - id поставшика в таблице supplier
    datetime - время импорта DEFAULT NOW();

    А вот с product_id мне нужно перед вставкой выбрать id в таблице product (Таблица в самом вопросе)

    *************************
    Или если Я правильно понял, у вас product_id = артикул товара
    И тогда при перекалькуляции цен мы просто выбираем свежие данные с таблицы product_price по артикру и обновляем цену в таблице price ?
    ERD
    YlxhvOj.png


    блин, уже сам запутался в своих мыслях, походу пора спать ((
  • Как работать с множеством прайс-листов в БД MySQL?

    Chvalov
    @Chvalov Автор вопроса
    sim3x, Хм, думал это применять на таблице product_supplier
    А в product_price всегда дописывать данные, чтобы график нарисовать + в админке увидеть какой товар несколько дней не обновлялся

    |   price  |   supplier_id    |   product_id   |   datetime   |
    |   162    |   1              | 1              |   26.01.18   |
    |   158    |   2              | 1              |   26.01.18   |
    |   160    |   1              | 1              |   27.01.18   |
    |   202    |   1              | 1              |   28.01.18   |
    |   193    |   2              | 1              |   28.01.18   |
  • Как работать с множеством прайс-листов в БД MySQL?

    Chvalov
    @Chvalov Автор вопроса
    sim3x, точнее на третем шаге в таблице product_price
    Вставка новой цены и даты
    А с выборки товар и поставщик
    price DECIMAL(13,6) NOT NULL,
    supplier_id TINYINT(3) UNSIGNED NOT NULL,
    product_id INT(10) UNSIGNED NOT NULL,
  • Как работать с множеством прайс-листов в БД MySQL?

    Chvalov
    @Chvalov Автор вопроса
    sim3x, Для этого планирую создать под каждого поставщика конфиг, в котором все будет сводится к одному варианту.

    Схема хороша тем что в дополнение можно рисовать график роста/падения цены, а также можно к цене и времени писать и наличие и также в графике рисовать

    Минус в том что нужно продумать как её оптимизировать, так как на втором шаге при записи в product_price слишком много выборок будет (Прайсы больше 100-150к товаров)
  • Как работать с множеством прайс-листов в БД MySQL?

    Chvalov
    @Chvalov Автор вопроса
    sim3x, По поводу связи
    Некоторые поставщики в прайсе пишут по разному:
    • MPN: AB600632, BRAND: AB
    • MPN: 600632, BRAND: AB
    , и возможен случай что цифры когда-то совпадут с другим товаром
    по этому решил связать с брендом
  • Как работать с множеством прайс-листов в БД MySQL?

    Chvalov
    @Chvalov Автор вопроса
    sim3x Для всех следующих прайсов (Импорт):
    INSERT INTO ... ON DUPLICATE KEY UPDATE ?

    Второй шаг: для записи цены и связи товара + поставщика, если товара нету в базе добавлять товар в общую категорию, после добавлять данные в product_price ?
  • Как работать с множеством прайс-листов в БД MySQL?

    Chvalov
    @Chvalov Автор вопроса
    sim3x Если я правильно понял схема будет примерно такой:
    Поставщик:
    CREATE TABLE supplier (
      id TINYINT(3) UNSIGNED NOT NULL AUTO_INCREMENT,
      name VARCHAR(128) NOT NULL,
      address VARCHAR(255) NOT NULL,
      phone VARCHAR(15) NOT NULL,
      website VARCHAR(255) NULL DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB;
    Теперь товары поставщиков:
    CREATE TABLE product_supplier (
      id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
      supplier_id TINYINT(3) UNSIGNED NOT NULL,
      brand INT(10) UNSIGNED NOT NULL,
      mpn_number VARCHAR(64) NOT NULL COMMENT 'Артикул товара',
      warehouse VARCHAR(255) NOT NULL COMMENT 'Склад (Адрес)',
      PRIMARY KEY (`id`),
      CONSTRAINT FK_supplier_id FOREIGN KEY (`supplier_id`) REFERENCES supplier(`id`),
      CONSTRAINT FK_brand_id FOREIGN KEY (`brand`) REFERENCES product__brands(`id`)
    ) ENGINE=InnoDB;
    И последнее история цен
    CREATE TABLE product_price (
      id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
      price DECIMAL(13,6) NOT NULL,
      supplier_id TINYINT(3) UNSIGNED NOT NULL,
      product_id INT(10) UNSIGNED NOT NULL,
      date DATETIME NOT NULL DEFAULT NOW(),
      PRIMARY KEY (`id`),
      CONSTRAINT FK_supplier_id FOREIGN KEY (`supplier_id`) REFERENCES supplier(`id`),
      CONSTRAINT FK_product_id FOREIGN KEY (`product_id`) REFERENCES product(`id`)
    ) ENGINE=InnoDB;


    Но я что-то запутался, логика этой схемы такая ?:
    • При загрузке прайс листа все данные пишем в product_supplier, без цен
    • Цены пишем в product_price
    • После чего делаем перекалькуляцию цен в таблице product используя последние данные с product_price
  • Как работать с множеством прайс-листов в БД MySQL?

    Chvalov
    @Chvalov Автор вопроса
    Для новых товаров, которых не было в БД скорее всего будет создана отдельная таблица, либо еще лучше отдельная общая категория со своей наценкой, чтобы с админ панели можно было привязать к нужным категориям
  • Как работать с множеством прайс-листов в БД MySQL?

    Chvalov
    @Chvalov Автор вопроса
    sim3x,
    1. Сохранять не обязательно, но было бы плюсом
    2. Поставщики имеют одинаковый артикул товара, в некоторых правда без лишних символов, но это буду делать с помощью trim()
    3. Пользователю будет показываться либо средняя цена + наценка либо минимальная с прайса + наценка

    Правда с наценкой так-же нужно будет продумать, так как на разные категории товаров разная наценка.

    В БД товары с артикулами уже привязаны к категориям
    -- Связь (Товар<->Категория)
    CREATE TABLE category__product (
      product_id INT(10) UNSIGNED NOT NULL,
      category_id INT(10) UNSIGNED NOT NULL,
      PRIMARY KEY (`product_id`,`category_id`),
      CONSTRAINT FK_category_produc_pid FOREIGN KEY (`product_id`) REFERENCES product(`id`),
      CONSTRAINT FK_category_produc_cid FOREIGN KEY (`category_id`) REFERENCES category(`id`)
    ) ENGINE=InnoDB;
  • Как лучше реализовать дерево категорий для интернет магазина в SQL?

    Chvalov
    @Chvalov Автор вопроса
    Для выборки удобно, но мне кажется что расширять и редактировать данную структуру не совсем удобно
  • Как реализовать хранение картинок на другом сервера?

    Chvalov
    @Chvalov Автор вопроса
    Александр Аксентьев, 180Гб это уже картинки которые пережал imgo с параметром -m -b
    Времени ушло на это сжатие около 2 месяцев
  • Как реализовать хранение картинок на другом сервера?

    Chvalov
    @Chvalov Автор вопроса
    поддомен будет вести на другой сервер с картинками
  • JpaRepository возвращает null при этом SQL запрос составляет верный, куда смотреть?

    Chvalov
    @Chvalov Автор вопроса
    Выполнил:
    System.out.println(authorRepository.findByFioContainingIgnoreCaseOrderByFio("ча"));
            System.out.println(authorRepository.findOne(25L));
            System.out.println(bookRepository.findOne(20L));
            System.out.println(authorRepository.findByFioContainingIgnoreCaseOrderByFio("чо"));

    Получил вот такой SQL лог:
    2018-01-20T04:02:37.615823Z	  754 Query	/* select generatedAlias0 from Author as generatedAlias0 where upper(generatedAlias0.fio) like upper(:param0) order by generatedAlias0.fio asc */ select author0_.id as id1_0_, author0_.birthday as birthday2_0_, author0_.fio as fio3_0_ from library.author author0_ where upper(author0_.fio) like upper('%??%') order by author0_.fio asc
    2018-01-20T04:02:37.616909Z	  754 Query	set session transaction read only
    2018-01-20T04:02:37.617245Z	  754 Query	SET autocommit=0
    2018-01-20T04:02:37.618412Z	  754 Query	select author0_.id as id1_0_0_, author0_.birthday as birthday2_0_0_, author0_.fio as fio3_0_0_ from library.author author0_ where author0_.id=25
    2018-01-20T04:02:37.621222Z	  754 Query	commit
    2018-01-20T04:02:37.621710Z	  754 Query	SET autocommit=1
    2018-01-20T04:02:37.622159Z	  754 Query	select @@session.tx_read_only
    2018-01-20T04:02:37.622970Z	  754 Query	set session transaction read write
    2018-01-20T04:02:37.623650Z	  754 Query	set session transaction read only
    2018-01-20T04:02:37.624843Z	  754 Query	SET autocommit=0
    2018-01-20T04:02:37.627488Z	  754 Query	select book0_.id as id1_1_0_, book0_.author_id as author_13_1_0_, book0_.avg_rating as avg_rati2_1_0_, book0_.content as content3_1_0_, book0_.descr as descr4_1_0_, book0_.genre_id as genre_i14_1_0_, book0_.image as image5_1_0_, book0_.isbn as isbn6_1_0_, book0_.name as name7_1_0_, book0_.page_count as page_cou8_1_0_, book0_.publish_year as publish_9_1_0_, book0_.publisher_id as publish15_1_0_, book0_.total_rating as total_r10_1_0_, book0_.total_vote_count as total_v11_1_0_, book0_.view_count as view_co12_1_0_, author1_.id as id1_0_1_, author1_.birthday as birthday2_0_1_, author1_.fio as fio3_0_1_, genre2_.id as id1_2_2_, genre2_.name as name2_2_2_, publisher3_.id as id1_3_3_, publisher3_.name as name2_3_3_ from library.book book0_ left outer join library.author author1_ on book0_.author_id=author1_.id left outer join library.genre genre2_ on book0_.genre_id=genre2_.id left outer join library.publisher publisher3_ on book0_.publisher_id=publisher3_.id where book0_.id=20
    2018-01-20T04:02:37.635220Z	  754 Query	commit
    2018-01-20T04:02:37.635841Z	  754 Query	SET autocommit=1
    2018-01-20T04:02:37.638517Z	  754 Query	select @@session.tx_read_only
    2018-01-20T04:02:37.639451Z	  754 Query	set session transaction read write
    2018-01-20T04:02:37.641171Z	  754 Query	/* select generatedAlias0 from Author as generatedAlias0 where upper(generatedAlias0.fio) like upper(:param0) order by generatedAlias0.fio asc */ select author0_.id as id1_0_, author0_.birthday as birthday2_0_, author0_.fio as fio3_0_ from library.author author0_ where upper(author0_.fio) like upper('%??%') order by author0_.fio asc
  • Выборка страны VIN номера с помощью SQL запроса, как реализовать?

    Chvalov
    @Chvalov Автор вопроса
    d-stream Вторые VIN ? или WMI 12-14 символ?

    Можно маленький пример запроса, а то но совсем догоняю это:
    Ну а так: гребем данные в обратном порядке к степени детализации - т.е. вначале наиболее частные, потом более общие... а от всего этого top 1

    или хотяб логику выполнения