Выберите равное количество записей для условий WHERE - PullRequest
0 голосов
/ 22 октября 2018

У меня есть база данных и более миллиона записей в ней.Я хочу получить одинаковое количество записей из базы данных для 3 разных условий.В настоящее время я использую код, который выполняет 3 запроса MySQL.Интересно, есть ли возможность получить тот же результат, используя один запрос SELECT?.

Следующий код выбирает равное количество из 20 записей для каждого условия site = X.

<?php
/*---------*/
$db1 = mysqli_query($connect, "SELECT * FROM news WHERE site='1' ORDER BY id DESC LIMIT 0,20");

$db2 = mysqli_query($connect, "SELECT * FROM news WHERE site='2' ORDER BY id DESC LIMIT 0,20");

$db3 = mysqli_query($connect, "SELECT * FROM news WHERE site='3' ORDER BY id DESC LIMIT 0,20");

/*------------*/

?>

1 Ответ

0 голосов
/ 22 октября 2018

Вы можете использовать UNION ALL для объединения результатов нескольких запросов Select.Нам нужно убедиться, что количество возвращаемых столбцов одинаково во всех запросах Select.

(SELECT * FROM news WHERE site='1' ORDER BY id DESC LIMIT 0,20)
UNION ALL
(SELECT * FROM news WHERE site='2' ORDER BY id DESC LIMIT 0,20)
UNION ALL
(SELECT * FROM news WHERE site='3' ORDER BY id DESC LIMIT 0,20)

Теперь всегда помните, что результатом UNION всегда будет неупорядоченный набор данных.В случае, если вы хотите отсортировать окончательные результаты по id;Вы можете добавить явный Order By в конце.Это очень хорошо обсуждается в Документах :

Однако использование ORDER BY для отдельных операторов SELECT ничего не подразумевает в порядке, в котором строки появляются в конечном результате, потому что UNIONпо умолчанию выдает неупорядоченный набор строк.Следовательно, использование ORDER BY в этом контексте обычно связано с LIMIT, так что он используется для определения подмножества выбранных строк для извлечения для SELECT, даже если это не обязательно влияет на порядок этих строк вокончательный результат UNION.Если ORDER BY появляется без LIMIT в SELECT, он оптимизируется, потому что он все равно не будет иметь никакого эффекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...