我正在使用MySQL,这里是一个名为“profile”的数据库表。
然后我的项目要求我在配置文件中执行如下所示的某种“高级搜索”。我可以选择'匹配任何'或'匹配所有',然后是字段(全名,电子邮件等),条件(是,不是,包含,不包含等)并键入值。
首先,我尝试连接字段,这是表格。
然后为了实现高级搜索,我使用了where子句,然后使用了和/或如下。
SELECT (GROUP_CONCAT(`field_name`,'=',`field_value`)) AS `profile_values`,
FROM `test`.`profiles`
where `profile_values` like 'Full Name=%Bryan%' or `profile_values` like 'Phone=%123456789%'
group by `user_id`
此查询将给出2个结果(user_id = 1和3)。如果我需要匹配所有搜索字段,我只需要在查询中将'或'更改为'和'。
但是,如果我更改了如下所示的查询,将显示3个结果(user_id = 1,2,3)而不是2(user_id = 2,3):
.....其中profile_values
喜欢'全名=%B%'
查询似乎会在profile_values的任何部分搜索“b”。
有关如何修改搜索查询的任何建议?或者我不应该连接数据吗?
答案 0 :(得分:0)
查询
FullName=%B%
将在包含B的FullName之后查找任何内容,你是正确的。 您需要更好地构建查询。
您不需要使用连接字段创建第二个表。 而是编写一个将参数传递给查询的查询:
SELECT * FROM profile WHERE
FullName LIKE '%B%'
AND Email LIKE '%xyz%'
创建查询的代码结构会更复杂,您需要包含AND和OR,但它会解决您的LIKE问题,并且无需使用第二个表。