【问题标题】:Search function SQL in json array在 json 数组中搜索函数 SQL
【发布时间】:2021-03-07 07:26:29
【问题描述】:

大家好(希望标题是对的,我的英语有时会生锈)

我做了一个搜索功能,它适用于我的“代码”信息,我的公司名称,但我需要搜索 json 条目中的电子邮件,我是这样做的:

    $sql = 'SELECT SQL_CALC_FOUND_ROWS * FROM ' . $this->table . ' AS s 
            WHERE ((s.code LIKE :q)
            OR (s.company_name LIKE :q)
            OR (JSON_EXTRACT(s.contacts, "$.email") LIKE :q))';

我的错误在哪里?

【问题讨论】:

  • 嗯,你能分享一下 JSON 的示例数据吗?一行就足够了,你可以掩盖真正的价值,重要的是结构。
  • 当然,[{"lastname":"Bonnot","firstname":"Jean","email":"justinbridou@live.fr","phone1":"0675421357"}]
  • 我认为它失败了,因为您的 JSON 在一个数组中,而不是在 $.email 寻找的“顶级”级别
  • 好的,所以我的电子邮件在第二级,我该怎么办?也许我应该为我的“s.contacts”做一个 foreach ?
  • 似乎contacts 真的应该是另一张桌子。会为您省去很多这样的麻烦。

标签: php sql json


【解决方案1】:

好的,所以我使用了这个答案:

OR (JSON_EXTRACT(s.contacts, "$**.email") LIKE :q))';

就像@dazed-and-confused 指出我的电子邮件不在顶层,所以我用** 转到第二层,它工作。

【讨论】:

  • 这个解决方案唯一的问题是如果JSON字符串包含多个数组,这个方法会得到所有匹配的,而不仅仅是一个。
  • 想不出别的办法,有什么建议吗?
  • OR (JSON_EXTRACT(s.contacts, "$[0].email") LIKE :q))';
猜你喜欢
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-15
  • 2021-09-22
  • 2015-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多