【问题标题】:mysql json where inmysql json在哪里
【发布时间】:2018-07-02 15:30:07
【问题描述】:

我有两张如下表。但是我在查询时遇到了麻烦。 我要查询组内成员等于can_view_group的所有post,can_view_group列类型为JSON。

我只知道 JSON_CONTAINS 和 WHERE (column) IN 可以帮助我完成工作,但我实际上无法完成工作。我怎样才能让它工作?

谢谢。

附:我只想要纯 SQL 代码,因为当我将它应用于 php 代码或任何其他东西时,它应该是最简单的。

邮政 -------------------------------------- post_id | can_view_group | -------------------------------------- 1 | ["1","2","3"] | -------------------------------------- 成员组 -------------------------------------- 会员编号 | group_id | -------------------------------------- 123 | 1 | -------------------------------------- 123 | 2 | --------------------------------------

【问题讨论】:

  • 更好地规范您的数据结构

标签: php mysql sql arrays json


【解决方案1】:

最简单的方法是使用多个嵌套的REPLACE 函数来获取逗号分隔的字符串和MySQL 的非规范化函数FIND_IN_SET,它适用于逗号分隔的字符串。

查询

SELECT 
 *
FROM 
 post 
INNER JOIN
 member_group
ON
 FIND_IN_SET(member_group.group_id , REPLACE(REPLACE(REPLACE(post.can_view_group, '"', ''), '[', ''), ']', ''))

查看演示http://sqlfiddle.com/#!9/37e997/5

一个缺点是您永远无法通过这种方法使用索引。

最好的选择仍然是规范化,但这肯定需要更改应用程序。

【讨论】:

  • 非常感谢!这真是太棒了。如果我想针对这种情况对其进行规范化,结构将如何?
猜你喜欢
  • 1970-01-01
  • 2012-04-01
  • 2013-07-30
  • 1970-01-01
  • 2020-10-06
  • 2011-06-01
  • 2015-05-14
  • 2014-02-02
  • 1970-01-01
相关资源
最近更新 更多