如何在表中搜索多行或从连接值中搜索?

时间:2018-02-01 04:12:59

标签: mysql sql mysql-workbench

我正在使用MySQL,这里是一个名为“profile”的数据库表。 table profile

然后我的项目要求我在配置文件中执行如下所示的某种“高级搜索”。我可以选择'匹配任何'或'匹配所有',然后是字段(全名,电子邮件等),条件(是,不是,包含,不包含等)并键入值。 The advanced search interface

首先,我尝试连接字段,这是表格。

concatenated fields

然后为了实现高级搜索,我使用了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”。

有关如何修改搜索查询的任何建议?或者我不应该连接数据吗?

1 个答案:

答案 0 :(得分:0)

查询

FullName=%B%

将在包含B的FullName之后查找任何内容,你是正确的。 您需要更好地构建查询。

您不需要使用连接字段创建第二个表。 而是编写一个将参数传递给查询的查询:

SELECT * FROM profile WHERE
FullName LIKE '%B%'
AND Email LIKE '%xyz%'

创建查询的代码结构会更复杂,您需要包含AND和OR,但它会解决您的LIKE问题,并且无需使用第二个表。