okovalev
@okovalev

Можно ли уменьшить количество запросов до 1?

Есть таблица.
5c4b35173073a706152287.jpeg

В целом для нужной мне выборки нужно 4 запроса:
SELECT * FROM `table` WHERE `smen` <= 0 AND `cash` > 500 ORDER BY `cash` DESC LIMIT 1;
SELECT * FROM `table` WHERE `smen` <= 1 AND `cash` > 500 ORDER BY `cash` DESC LIMIT 1;
SELECT * FROM `table` WHERE `smen` <= 0 ORDER BY `cash` DESC LIMIT 1;
SELECT * FROM `table` WHERE `smen` <= 1 ORDER BY `cash` DESC LIMIT 1;

т.е. это такой аналог приоритета выборки.
Если 1 запрос вернул 0 строк, то выполняем 2.
итд
Можно ли объединить это в 1 запрос?
Или лучше брать выборку и уже в php приложении проходить через Ifelse к примеру или switch?
  • Вопрос задан
  • 372 просмотра
Ответы на вопрос 2
@rPman
У вас там везде стоит limit 1, боюсь это никак эффективно не агрегировать

Но если у вас реально большие данные, в некоторых случаях можно добавить дополнительную логику в базу, когда в специальной таблице тригерами вычисляются необходимые значения (например можно хранить id записи с минимальным значением и каждое следующее новое проверять с прежним минимумом, тогда не надо будет в тригере постоянно минимумы искать, т.е. трудоемкость O(1)), соответствующих условию, сами понимаете что итоговая нагрузка будет ложиться не на чтение а на вычисления во время записи в таблицы.

Ваш пример простой а значит предложение с тригерами - вполне подходит.
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы