Ответы пользователя по тегу MySQL
  • Как переписать 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
    Индексы. И, пожалуй, самое важное - правильно написанные запросы в базу данных.
    Ответ написан
    Комментировать
  • WHERE в SELECT SQL?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    SELECT [Поле группировки], sum(что сложить) FROM `table`  
     WHERE <условие>
     group by [Поле группировки]


    или

    SELECT [Поле группировки], sum(что сложить) FROM `table`  
     group by [Поле группировки]
    having [условие]


    Запросы работают примерно одинаково. Только в первом мы сначала накладываем условие на таблицу, а потом группируем. А во втором сначала получаем данные и накладываем условие.
    Ответ написан
    Комментировать
  • SQL запрос, найти разницу в 2 столбцах?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    SELECT id2
    FROM table t1
    left join table t2 ON t1.id2=t2.id1
    where t2.id1 is null

    А вообще сохраните картинку себе на память
    2ee4f7db62d3481e9df4698c2af7a97d.jpg
    Ответ написан
    Комментировать
  • Как оптимизировать данный SQL код?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    SELECT orders.delivery,SUM(orders.delivery) as SUMM
    FROM orders
    JOIN baskets ON orders.basket_id=baskets.id
    WHERE baskets.purchase_status = 3 AND orders.deleted_at IS NULL
    AND DATE(orders.created_at) >= :start AND DATE(orders.created_at) <= :finish

    GROUP BY orders.delivery
    Ответ написан
  • Поочередно подставить значения в SQL запрос?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Сформируйте временную таблицу где будут два поля: 1е - первое значение type, 2e - второе значение.
    Допустим это будет таблица tmp_type с полями type1 и type2
    Затем пишем такой запрос:
    SELECT  tmp_type.type1,tmp_type.type2,sum(money) FROM `accounts` 
    inner join tmp_type ON tmp_type.type1 =accounts.type or tmp_type.type2 =accounts.type
    group by tmp_type.type1,tmp_type.type2
    WHERE date >= (CURDATE()-1) AND date < CURDATE()
    Ответ написан
    Комментировать
  • Как правильно составить SQL запрос?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    У вас немного неправильная логика построения запроса. Сначала сгруппируйте таблицы Order_position и Order_other по GROUP BY Order_id. А потом соединяйте их с заказом.
    Добавил код:
    SELECT O.ID
    	,O.Customer
    	,x.Summ
    	,y.summ
    FROM ORDER O
    LEFT JOIN (
    	SELECT order_id
    		,SUM(Price * Value) AS summ
    	FROM Order_other
    	GROUP BY order_id
    	) x ON O.Id = x.Order_id
    LEFT JOIN (
    	SELECT order_id
    		,SUM(Weight) AS summ
    	FROM Order_position
    	GROUP BY order_id
    	) y ON O.Id = y.Order_id
    Ответ написан
    7 комментариев
  • Как выбрать самые часто упоминаемые тэги из базы данных с помощью 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...
    Ответ написан
    Комментировать
  • Как сделать выборку из БД делая объединение с разными таблицами в зависимости от значения поля?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Я думаю суть будет понятна - соединяем таблицы left join-ом и если значение в первом случае NULL то берем другое значение. Если типов сообщений будет больше чем 2, используйте оператор coalesce

    select 
    [ id пользователя]
     ISNULL(U.ID, system.id] as [ID сообщения]
     from tbl_notice  N
    left join user  U ON  U.ID=N.[id сообщения] and type="user"
    left join Systems  S ON  S.ID=N.[id сообщения] and type="System"


    P.S. Поздно увидел что вопрос для MYSQL, но для MS SQL работать будет точно.
    Ответ написан
    Комментировать