@XenK

Поочередно подставить значения в SQL запрос?

Есть такой запрос:
SELECT sum(money) FROM `accounts` WHERE date >= (CURDATE()-1) AND date < CURDATE() AND type IN (101,225)

Необходимо меняя type, выполнить несколько запросов, например (type разные, т.е не с 0 - 1000):
SELECT sum(money) FROM `accounts` WHERE date >= (CURDATE()-1) AND date < CURDATE() AND type IN (353,448).
SELECT sum(money) FROM `accounts` WHERE date >= (CURDATE()-1) AND date < CURDATE() AND type IN (458,248)
...

Как можно оптимизировать такой запрос?
  • Вопрос задан
  • 709 просмотров
Пригласить эксперта
Ответы на вопрос 3
atis2345
@atis2345
PHP developer
SELECT * FROM accounts WHERE type IN (1, 2)
UNION ALL
SELECT * FROM accounts WHERE type IN (3, 4)

А зачем несколько раз запрос выполнять? Можно ведь сразу несколько type передать предварительно их где то вычисляя!

UPD: пример за две минутки
$sql = [];
$params = [];

$PDO; // Создаете PDO объект

for($i = 0, $max = 10; $i < $max; $i++) {

    $sql[] = "SELECT * FROM accounts WHERE type IN (?, ?)\r\n";

    $params[] = 0; // число 1
    $params[] = 1; // число 2
}

$query = implode("UNION ALL\r\n", $sql);

$sth = $PDO->prepare($query);

foreach($params as $key => $value) {

    $sth->bindValue($key, $value);
}

$sth->execute();
$sth->fetchAll(PDO::FETCH_ASSOC);
Ответ написан
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()
Ответ написан
Комментировать
@dmitryKovalskiy
программист средней руки
Я может чего-то не понимаю. А что вам запрещает сделать выборку по всем нужным type, а затем разгребать данные на уровне приложения? Зачем тут union и множественные типовые запросы?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 11:49
25000 руб./за проект
25 апр. 2024, в 11:37
40000 руб./за проект