【问题标题】:How to select by condition on JSON column in MySQL?如何按条件在 MySQL 中的 JSON 列上进行选择?
【发布时间】:2011-12-02 13:02:04
【问题描述】:

如何编写查询以在具有 JSON 数组的列上按 where 条件选择数据? IE。 假设我在 ci_sessions 中添加了 user_name、user_role。 user_data 是 JSON 数组。

SELECT *
FROM `ci_sessions` where user_data[user_role]='admin';
                 *********************/\***************

这里需要设计条件。我需要具有 user_role “admin”的数据。

更新:检查 user_role "admin" 是 where 条件的主要目标。

有什么方法可以将 where 条件添加为user_data[user_role]user_data->user_role

更新:这在 PostgresSQL DB 中是可能的。

【问题讨论】:

  • 这是一个糟糕的设计。如果你需要查询一个 user_role 字段,它应该是它自己的列。
  • 我知道这是糟糕的设计。但是 Stack Overflow 上的专业人士非常聪明。查询永远不可能吗?还是通过编写子查询?有什么事吗?
  • 那么根本不可能通过sql查询来检查这个条件吗?

标签: php mysql json codeigniter conditional-statements


【解决方案1】:

不知道您在那里做什么,但您只需调用$this->session->userdata('user_role'),CI 就会自动选择如何检索该值。如果您设置(并且我认为您这样做了)使用数据库,查询将自动执行。

我不明白你是如何实际保存会话变量的,如果你自己 json_encoded() 或者你指的是 CI 执行的编码。

在后者中,您只需:

if($this->session->userdata('user_role') == 'admin')
{
 // do stuff
}

否则,$role = json_decode($this->session->userdata('user_role')); 和检查数组,但我在这里帮不了你太多,因为你没有提供明确的信息

【讨论】:

  • 通过这个:$this->session->userdata('user_role') == 'admin',我会得到只有用户是否是管理员。我想显示“管理员”用户并且现在已经登录。我可以通过查询获得吗?
  • 查询永远不可能吗?还是通过编写子查询?有什么事吗?
【解决方案2】:

我一直在等待这种类型的查询,但我没有这样做。这就是我将sql和php结合起来的原因。

  1. 我已从所有 ci_sessions 表中获得结果。
  2. 然后我通过解码 JSON 数组的字段来检查结果。并且运行良好。
SELECT * FROM `ci_sessions`;
foreach ($result as $row) {
            $user_data=$row->user_data;
            foreach (unserialize($user_data) as $k => $v) {
                $final[] = array('key' => $k, 'value' => $v);
                if($k=='user_role' && $v='admin') {
//make array of admin information required to show
                }

            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-12
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 2018-09-19
    相关资源
    最近更新 更多