我正在尝试使用如下联合查询在两个表中搜索:
public function searchInAll($keyword) {
$sql = "(SELECT * FROM user_information
WHERE title LIKE ? OR name LIKE ? OR surname LIKE ?)
UNION
(SELECT * FROM groups WHERE name LIKE ?)";
$query = $this->db->prepare($sql);
$result = $query->execute(array("%$keyword%", "%$keyword%", "%$keyword%", "%$keyword%"));
if($query->rowCount()) {
$results = $query->fetchAll();
return $results;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
它总是返回 false。例如,我尝试使用一张桌子
SELECT * FROM groups WHERE name LIKE ?
Run Code Online (Sandbox Code Playgroud)
或者
SELECT * FROM user_information WHERE title LIKE ? OR name LIKE ? OR surname LIKE ?
Run Code Online (Sandbox Code Playgroud)
这些可以工作,但是对于两个表来说,它不起作用。
为什么会返回 false?
注意: 它们之间没有联系。它们是不同的桌子。
如果两个表的列数不同,则不能使用SELECT *and 。UNION
你应该这样做:
(
SELECT id, name, 'user' AS type
FROM user_information
WHERE title LIKE ? OR name LIKE ? OR surname LIKE ?
)
UNION
(
SELECT id, name, 'group' AS type
FROM groups
WHERE name LIKE ?
)
Run Code Online (Sandbox Code Playgroud)