如果数据库中有3个不同的字段名称,我如何搜索全名?

时间:2019-05-06 08:03:40

标签: php mysql

我有三个不同的列,first_name,middle_name和last_name。我将三列合并为一个全名。问题是,当我搜索全名甚至其他字段名称(如用户名)时,都会给我一个空表或空白表。当我在选择中删除3字段名时,我的全名列没有输出,其余字段名都可以。我想将这三个字段名称结合起来,以便每当用户搜索它时,它就显示为一个。可以组合三个字段名称并将其搜索为一列吗?这是我在下面的查询。

  public function searchUser($keyword) {
        $sql = "SELECT tbl_user.user_id, 
                       tbl_user.username, 
                       (tbl_user.first_name + tbl_user.middle_name + tbl_user.lastname), 
                       tbl_barangay.barangay_name 
               FROM tbl_user 
               INNER JOIN tbl_barangay 
                 ON tbl_barangay.barangay_id = tbl_user.barangay_id 
               WHERE username LIKE :keyword 
                 OR first_name LIKE :keyword 
                 OR last_name LIKE :keyword 
                 OR middle_name LIKE :keyword 
                 OR barangay_name LIKE :keyword";

        $stmt = $this->connection->prepare($sql);

        $stmt->execute([
            ":keyword" => '%' . $keyword . '%'
        ]);

        return $stmt->fetchAll();
    }

1 个答案:

答案 0 :(得分:0)

一个选择是为此使用VIEW。创建一个将三个字段组合为全名的视图。然后将您的查询指向该VIEW。或者,您可以只使用CONCAT函数为合并的字段添加条件。请参阅下面的查询:

SELECT tbl_user.user_id, 
       tbl_user.username, 
       CONCAT(tbl_user.first_name,' ',tbl_user.middle_name,' ',tbl_user.lastname) as fullname, 
       tbl_barangay.barangay_name 
FROM tbl_user 
INNER JOIN bl_barangay ON tbl_barangay.barangay_id = tbl_user.barangay_id
WHERE username LIKE :keyword OR 
      barangay_name LIKE :keyword OR 
      CONCAT(tbl_user.first_name,' ',tbl_user.middle_name,' ',tbl_user.lastname) LIKE :keyword

注意:您可以通过CONCAT更改字段名称的顺序