Объединение простых, почти идентичных утверждений - PullRequest
0 голосов
/ 25 октября 2018

Один из параметров, которые принимает моя PHP-страница, - это поисковый запрос пользователя.Затем приложение принимает этот запрос и выполняет> 100 отдельных операторов SELECT, которые выглядят примерно так:

SELECT * FROM table1 WHERE user = 'query';
SELECT * FROM table2 WHERE user = 'query';
SELECT * FROM table3 WHERE user = 'query';
SELECT * FROM table4 WHERE user = 'query';
...etc...

Есть ли более быстрый / более эффективный способ сделать то, что я пытаюсь сделать?Например, как-то объединить все операторы select в одно утверждение?Я чувствую, что 100 отдельных запросов к моей базе данных будут медленнее, чем один большой запрос.Я не знаю, как их объединить, пожалуйста, помогите мне.

Ответы [ 2 ]

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

Вы можете использовать Merge Storage Engine , чтобы создать виртуальную таблицу, объединяющую все эти таблицы, и затем запросить эту таблицу.

CREATE TABLE table1_100 (
    <column specifications>
) ENGINE=MERGE UNION=(table1, table2, table3, ...)

Затем вы можете просто написать:

SELECT * FROM table1_100 WHERE user = 'query';
0 голосов
/ 25 октября 2018

Вы можете использовать оператор union all для объединения этих запросов:

SELECT * FROM table1 WHERE user = 'query'
UNION ALL
SELECT * FROM table2 WHERE user = 'query'
UNION ALL
SELECT * FROM table3 WHERE user = 'query'
-- Etc...

При этом, возможно, вы захотите пересмотреть свой дизайн базы данных.Если вы всегда запрашиваете эти таблицы вместе, возможно, все данные следует добавить в одну таблицу.

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