如何使用 union 在两个表中进行搜索?

Lev*_*lun 1 php mysql pdo

我正在尝试使用如下联合查询在两个表中搜索:

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?

用户信息: 用户信息表

团体: 组表

注意: 它们之间没有联系。它们是不同的桌子。

ôki*_*kio 5

如果两个表的列数不同,则不能使用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)