我有三个不同的列,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();
}
答案 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更改字段名称的顺序