【问题标题】:Select on multiple ids in a field formatted as json在格式为 json 的字段中选择多个 id
【发布时间】:2012-05-04 08:33:42
【问题描述】:

如何对 JSON 格式的多个 ID 进行选择?

$query = 'SELECT * FROM articles as a WHERE "10" IN (a.catids)';

The value of a.catids in the db-field is {"0":"10","1":"12"};

【问题讨论】:

  • 你能说得更具体一点吗?
  • 如果您的 JSON 是 mysql 表中的字符串,您可以使用正则表达式搜索您要查找的 ID
  • 我的表格中有一些文章。每篇文章都有一个或多个类别 ID 存储在字段 catids(JSON 格式)中。现在我想过滤来自特定类别的所有文章。
  • @user1291492 听起来很棒!可以举个例子吗?
  • 规范化您的表格,让您的脚本将数据正确地放入数据库中,而不是将其作为 JSON 保存在数据库中。这是错误的。

标签: php mysql sql json select


【解决方案1】:

没有“正确”的方式来做到这一点。 MySQL 不知道 JSON 是什么,即使您对 ID 进行文本搜索,您也会发现它非常慢。

我建议对表格进行规范化。更新您的脚本,简单地将catids 放在一个单独的表中。

【讨论】:

  • 是的,你是对的。我会同意的。只是想知道,因为将 id 以 JSON 格式存储在字段中是如此简单:-)
  • @COBIZwebdevelopment 你应该接受这个(左边投票下的钩子)
【解决方案2】:

类似:

$query = 'SELECT * FROM articles as a WHERE a.catids like '%:"10",%';

我包括了 : 和 ,所以你确定你选择的是值而不是索引

【讨论】:

  • 当然,这个查询会非常慢,因为它必须遍历每一行来进行匹配。
【解决方案3】:

我猜你正在寻找 LIKE。

SELECT * FROM articles as a WHERE a.catids LIKE '%10%'

您还想查找 LIKE 的语法(因为您可以搜索 `%"_":"10"%' 并且只搜索第二部分,甚至更复杂的东西。

不过,最好不要以这种方式存储您的 ID。

【讨论】:

    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 2019-06-27
    • 2020-03-07
    • 2021-02-23
    • 2023-01-18
    相关资源
    最近更新 更多