标题听起来很简单......主要问题是我应该查询的方向以及如何输出结果。
这是一个空搜索的屏幕截图:
客户端应始终可见(与搜索查询匹配)。所以这里举几个例子:
我查询项目并加入客户端,如下所示:
SELECT *
FROM projects AS a
LEFT JOIN clients AS b ON a.client_id = b.id
WHERE a.name LIKE '%$searchString%' OR b.name LIKE '%$searchString%'
之后我查询客户端,不包括上面查询中提取的客户端。这是(我知道的)唯一的方式让那些没有任何项目的客户。
是否有可以在查询中获取这些结果的语句?这对我来说似乎不太优雅。此外,如果我搜索client2 project1,系统将失败。
编辑:感谢目前为止的答案。我得到了很多在mysql中无法实现的完全连接。我在问题的标题和标签中改变了...对不起。我对完全连接一无所知,而且在mysql中它们是不可能的。答案 0 :(得分:1)
Here是SQL中不同连接类型的良好直观表示。
确保使用预准备语句,而不是直接将searchString放入查询中,因为这就是SQL注入攻击的发生方式。
SELECT
*
FROM
clients b LEFT OUTER JOIN
projects AS a ON a.client_id = b.id
WHERE
a.name LIKE '%$searchString%' OR
b.name LIKE '%$searchString%'
答案 1 :(得分:0)
执行一个RIGHT JOIN
,无论他们是否有项目,都会为您提供所有客户,然后WHERE a.name IS NULL
将只为您提供没有项目的客户。
所以整个查询看起来像
SELECT *
FROM projects AS a
RIGHT JOIN clients AS b ON a.client_id = b.id
WHERE a.name IS NULL
答案 2 :(得分:0)
你可以写这个
SELECT
*
FROM
clients b FULL OUTER JOIN
projects AS a ON a.client_id = b.id
WHERE
a.name LIKE '%$searchString%' OR
b.name LIKE '%$searchString%'