2016-07-29 81 views
0

标题听起来很简单...主要问题是从什么方向我应该查询和如何输出结果。MySQL在多列搜索

这里有一个截图与空搜索:

enter image description here

的客户应始终是可见的(相匹配的搜索查询)。所以在这里举几个例子:

  • 搜索项目2应与项目2输出客户端2
  • 搜索客户机程序应与所有项目输出客户端2
  • 搜索client3应该输出client3

我查询项目和加入这样的客户:

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%' 

之后,我查询f或者不包括上述查询中提取的客户端。这是唯一的方法(我知道)来获得没有任何项目的客户。

是否有可以在查询中获取这些结果的语句?这对我来说似乎不是很优雅。此外,如果我搜索client2 project1系统失败。

编辑:谢谢你到目前为止的答案。我有很多完整的连接,这在mysql中是不可能的。我改变了问题的标题和标签......对不起。我不知道任何关于完整连接的信息,并且它们在mysql中不可能。

+0

尝试改变'LEFT JOIN'为'FULL OUTER JOIN'。 –

+0

或者,也可以切换表格的顺序,使左连接包含空项目,或保持它们的顺序相同并切换到正确的连接。 –

回答

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 
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%' 
+0

感谢您的帖子。我已经知道SQL注入 –

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%'