使用union,您可以加入多个选择结果:
SELECT id FROM `articles` WHERE title LIKE $query
UNION
SELECT id FROM `articles` WHERE text LIKE $query
上面的查询当然是一种愚蠢的搜索方式。它等于:
SELECT id FROM `articles` WHERE title LIKE $query OR text LIKE $query
但是,对于嵌套选择,这种方法可能更有意义:
SELECT * FROM `articles` as art WHERE exists
(SELECT 1 FROM `users` WHERE users.id = articles.author AND username LIKE $query)"
您刚刚阅读的查询将按用户名返回文章。如果使用了许多嵌套搜索,则使用union开始有意义。
但是union会返回以OR方式连接的结果。我需要以AND方式获得结果,如果所有子搜索都返回,则只返回一行。
看看第一个例子。我正在寻找等于此的联合查询:
SELECT id FROM
articles
WHERE title LIKE $query AND text LIKE $query
这可能吗?
答案 0 :(得分:2)
不,这是不可能的。 UNION
只返回一个网格中两个查询的结果,唯一的约束是您需要返回相同数量的列,并且列需要具有相同的类型。
为了使代码更简单,您可以使用JOIN
而不是子查询:
SELECT * FROM `articles` AS art
INNER JOIN `users` AS u
ON art.author = u.id
WHERE u.username LIKE $query