gpt4 book ai didi

mysql - 当两个表中都不存在数据时,查询不返回任何结果

转载 作者:行者123 更新时间:2023-11-30 21:34:34 26 4
gpt4 key购买 nike

所以,我有两张 table 。 users包含用户基本信息,user_address包含用户地址’。非常简单。

我有一个允许查找用户的搜索表单。一个搜索字段使用 LIKE 搜索多个列。它允许用户被他们的...拉动

公司名称(列在用户表下)名称(在用户地址表下列出)电子邮件地址(用户地址表)Phone 1(用户地址表)Phone 2(用户地址表)

表单触发 Ajax,通过 $_POST 将搜索值传递到搜索页面。

$value 然后从 $_POST 分配并被过滤,然后传递给 mysql 查询。

在用户和用户地址都存在的正常情况下,下面的查询可以完美运行。

问题是,有时当一个“用户”被添加到数据库时,地址并没有立即输入。在这种情况下,当尝试搜索用户时,找不到用户。

无论是否输入地址,我都需要它来查找用户。我试过 JOIN、LEFT JOIN、RIGHT JOIN、INNER JOIN 等。似乎没有任何效果。出于某种原因,left join 会降低查询速度,并且当查询被触发时,页面会陷入困境。

"SELECT u.id,u.company,a.name as address_name
FROM Users as u
JOIN User_Address as a ON a.user_id = u.id
WHERE a.name LIKE '%$value%' OR u.company LIKE '%$value%' OR a.email LIKE '%$value%' OR a.phone_1 LIKE '%$value%' OR a.phone_2 LIKE '%$value%' GROUP BY u.id”

同样,当用户存在于用户表中,但用户地址表中不存在该用户的地址时,搜索也会出现问题。

最佳答案

您的查询有点棘手,因为如果我理解正确的话,您希望同时拥有用户和地址,即使匹配仅在用户中。这就是为什么我会将匹配拉入子查询。这也将极大地帮助提高性能。

SELECT Users.id, Users.company, User_Address.name AS address_name
FROM (
SELECT id AS user_id FROM Users WHERE u.company LIKE '%$value%'
UNION
SELECT user_id
FROM User_Address
WHERE a.name LIKE '%$value%'
OR a.email LIKE '%$value%'
OR a.phone_1 LIKE '%$value%'
OR a.phone_2 LIKE '%$value%'
) AS matches
JOIN Users ON Users.user_id = matches.user_id
LEFT JOIN User_Address ON User_Address.user_id = Users.id
GROUP BY u.id

顺便说一句,LIKE '%$value%' 看起来您正在使用字符串插值来构建查询。这可能是不安全的。确保您的值已正确转义,并且您了解危险和替代方案(例如使用参数绑定(bind)库)。

关于mysql - 当两个表中都不存在数据时,查询不返回任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54619438/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com