поиск нескольких таблиц с помощью MySQL? - PullRequest
2 голосов
/ 08 апреля 2011

У меня есть этот sql, который получает сообщения по условиям:

SELECT * FROM posts where content like '%" . $_GET['term'] . "%'"

но я хочу искать больше таблиц, таких как теги и пользователи одновременно. т.е.

SELECT * FROM users where username like '%" . $_GET['term'] . "%'"
SELECT * FROM topics where tag like '%" . $_GET['term'] . "%'"

и мне было интересно, как я могу объединить их все вместе в запрос. Я знаю, что вы должны что-то сделать с As заявлением, т.е.

content as Value
username as Value
tag as Value

и я также хочу получить тип возвращаемого запроса, т. Е. Если возвращаемый результат - пользователь, то это будет пользователь TYPE, поэтому я могу их различать.

Ответы [ 2 ]

2 голосов
/ 08 апреля 2011

Простого СОЮЗА ВСЕ должно хватить:

Select 'user' as hit_type, id from users where username like '%" . $_GET['term'] . "%'"
union all
Select 'topic' as hit_type, id FROM topics where tag like '%" . $_GET['term'] . "%'"
1 голос
/ 08 апреля 2011

Вы уверены, что это то, что вы хотите сделать?Даже если вы выполните такой запрос, у вас будет банан, смешанный с апельсинами.Собираетесь ли вы показать это своим пользователям, хотя они не имеют никакого отношения друг к другу?

Кроме того, как вы думаете, вы сможете отсортировать их соответствующим образом?Я имею в виду, что вы можете сортировать пользователей по фамилиям, но по темам - по дате.

Просто моя идея, но я бы пошел и сделал страницу результатов с двумя отдельными списками результатов (с двумя запросами): "Мы нашли в пользователях ".. Список пользователей, которые соответствуют запросу пользователя" Мы нашли в сообщениях ".. Список сообщений, которые соответствуют запросу.

И просто чтобы быть уверенным, что вы знаете оэто, не забудьте из соображений безопасности экранировать переменные строки запроса перед отправкой их в запрос:

SELECT * FROM users where username like '%" . mysql_real_escape_string($_GET['term']) . "%'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...