Ответы пользователя по тегу Базы данных
  • Как переписать SQL запрос?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Если вы хотите от запроса скорости, то избавляйтесь от "вложенных" запросов. Вот это:
    EXISTS (select 1 FROM oc_product_attribute_id p2a0 WHERE p2a0.product_id=p2a.product_id AND p2a0.text_id = 67)

    На каждую строку системе еще и доп запрос делать приходится

    Убирайте лишние join-ны.
    К примеру у вас есть
    LEFT JOIN oc_manufacturer m ON(m.manufacturer_id=p.manufacturer_id)

    А теперь найдите где вы к M в выборке данных общаетесь.

    Если вы выводите данные attribute_id, text
    то зачем вам в подзапросе еще куча полей понадобилась?
    SELECT DISTINCT p.product_id, p2a.attribute_id, p2a.text, p.price as realprice


    WHERE 1
    Я не знаток MySQL но я не понимаю зачем вам это???

    Еще видим условие:
    WHERE p2a.attribute_id IS NOT NULL

    Если p2a.attribute_id обязателен, то стоит написать INNER JOIN к таблице и не мучать себя лишними и бесполезными условиями.
    Ответ написан
  • С чего начать систему учёта склада?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Я на своей практике (а работаю я именно с системами учета) из нормальных могу порекомендовать такую структуру:
    1) таблица Приходов Income (заголовок, где указанны дата прихода, подразделение куда пришел и прочее) + IncomeGoods - (тело заголовка, где указан товар, количество и цена)
    2) Таблица Расходов Outgo(заголовок, где указанны дата расхода, подразделение от куда ушел) + OutgoGoods - (тело заголовка, где указан товар, количество и цена)
    3) таблица взаимосвязей - RelationIO (идентификаторы приходной позиции товара из IncomeGoods и OutgoGoods )-> таблица взаимосвязей приходов и расходов.
    В чем суть таблицы: у вас есть приход допустим 20 штук. Вам нужно забрать из него 10 штук. Вы записываете в RelationIO то количество которое вы забрали из прихода и что его забрало.
    Только понадобится написать процедуру проведения накладной - под проведением я подразумеваю набор свободных остатков для расхода.
    Теперь по отдельным пунктам.
    • Проводить документ только в транзакции. Никакие вычитания в данной системе не нужны. Все операции обратимы. Вы можете убрать взаимосвязи и удалить расход
    • при каждом обращении рассчитывать предыдущее состояние склада, вычитать из него 3-4 тысячи заказов и прибавлять 3-4 сотни поставок – не решение

      Для проведения это единственное правильное решение. Иначе готовьтесь к большой Ж... в приходах и расходах, когда вся ваша система разрастется.
    • Создайте в заголовках места хранения "Основное" и "Брак" + прочие
    • По последнему писать не буду. Много там слишком. Если такая система заинтересует, могу примерную структуру таблиц прислать с алгоритмом (или кодом на MS SQL) для проведения

    Ответ написан
    7 комментариев
  • Какой индекс выбрать ASC или DESC?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Я не очень пойму чего вы ходите добиться.
    ASC и DESC всего лишь направления для сортировки.

    SELECT TOP 50 * FROM table ORDER BY id DESC - даст вам 50 последних записей
    SELECT TOP 50 * FROM table ORDER BY id ASC - даст вам 50 первых записей.

    Поясните, может это я еще дзен не постиг?
    Ответ написан
    1 комментарий
  • Как учитывать товар в WMS?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Приходы и расходы считаем накладными. Накладная состоит из 2 таблиц как минимум: таблица заголовков (номер, дата, дата оприходования и проч) и таблица тушек (товар, кол-во, цена и прочее по вкусу).
    Отдельные таблицы на приходы, отдельные на расходы.
    Плюс одна таблица (Relation)на списание товаров из приходов.

    Далее при необходимости набрать товар на расход (продажа, перемещение, списание и прочее) смотрим наши приходы, за вычетом записей из Relation.
    Сам алгоритм можно и в сети найти, находил как-то... Но могу свой скинуть, если вдруг решитесь разобраться в чужом коде (MS SQL).
    Вот тут примерный образец того как у нас это выглядит. Часть таблиц как Товары, Подразделения я не указал.
    391f85d2dbe6443fa3c6896f5d1d6952.png
    Ответ написан
    6 комментариев
  • Как выбрать самые часто упоминаемые тэги из базы данных с помощью SQL?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    select 
    top 100
    tags,
    COUNTposts  
    from 
    (
    select  tags, COUNT( posts ) as COUNTposts 
    from  Posts_Tags
    where  (указываешь диапазон времени)
    group by tags
    ) x
    order by COUNTposts


    Либо убираешь top 100 и пишешь условие для выборки.
    Можно конечно через HAVING еще упростить. Но не знаю есть ли он на MySQL и Postgresql...
    Ответ написан
    Комментировать