【发布时间】:2012-07-13 16:55:53
【问题描述】:
我正在为一家公司制作一个定制的在线管理应用程序,用户可以在其中管理客户、产品、组件、提供商等。现在我正在制作一个搜索表单,用户可以在其中使用关键字和各种选项搜索客户。现在,对于关键字搜索,我知道如何使用 MySQL FullText,问题更多与额外的搜索选项有关。
因此,基本上,每个客户都可以分配到一个或多个类别。客户也可能不会被分配到任何类别。为此,我使用了三个表:
- “clients”表,保存客户的基本信息,如姓名、联系方式等。每个客户都有一个唯一的ID
- “categories”表,只有 ID、title 和 description 字段
- “categories_assign”表,其中只有“clientId”和“categoryId”两个字段。它允许我为客户分配多个类别。
现在,在搜索表单中,用户可以选择要搜索的类别;可以一次选择多个类别,以及“无”值,它应该搜索没有类别的客户。没有任何类别的客户基本上不会在“categories_assign”表中有任何条目。
这是我的问题:搜索分配给特定类别的客户没有问题,但我找不到搜索没有类别的客户的方法..
这是根据所选类别选择客户的查询的简化版本(出于可读性目的):
SELECT * FROM clients c, categories_assign a WHERE c.id = a.clientId AND a.categoryId IN(1,7,43,52)
正如您所料,此选择的客户端分配到类别 ID 1、7、43 或 52。这确实可以正常工作。但是,正如我之前所说,我无法找到一种方法来选择没有类别的客户,即。在“categories_assign”表中没有任何条目的客户端。我也希望能够同时选择特定的类别。 (例如,搜索类别 ID 1、7、43、52 和没有类别的客户)。我尝试使用连接,但没有运气。
我能想到的唯一解决方法是在“categories_assign”表中创建一个条目,其中“categoryId”设置为 0,意思是“无类别”,所以我只需要搜索“categoryId”0。我'如果可能的话,希望避免这样做。
有人有线索吗?
提前致谢!
【问题讨论】:
-
请提供示例数据和所需的输出。