【问题标题】:How do I search for multiple rows in a table or search from concatenated values?如何在表中搜索多行或从连接值中搜索?
【发布时间】:2018-02-01 04:12:58
【问题描述】:

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

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

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

然后为了实现高级搜索,我使用了where子句后跟like,和/或如下。

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 喜欢'Full Name=%B%'

查询似乎会在 profile_values 的任何部分搜索“b”。

关于如何修改搜索查询的任何建议?还是我不应该连接数据?

【问题讨论】:

    标签: mysql sql mysql-workbench


    【解决方案1】:

    查询

    FullName=%B%
    

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

    您不需要使用连接字段创建第二个表。 而是编写一个将参数传递到查询中的查询,如下所示:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多