微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL 将 JSON 列转换为数组并获取页面

如何解决MySQL 将 JSON 列转换为数组并获取页面

取个标题太难了,抱歉!

我拥有的数据库结构是以下列:

页面

  • id (int)
  • 网址(字符串)
  • 内容(字符串)
  • created_at(时间戳)

  • id (int)
  • related_pa​​ge_ids (json)
  • domain_id (int)
  • created_at(时间戳)

我想要实现的是通过选定的域 ID 检索所有组,然后使用它检索所有相关页面。如果我应该用丑陋的 PHPMysqL 编写它:

$groups = SELECT * FROM groups WHERE domain_id = 1;
    
foreach($groups as $group){
    $pages = SELECT * FROM pages WHERE IN id = implode($group['related_page_ids']);
}

我希望你通过丑陋的例子理解我的目标。

解决方法

如果您有权访问 JSON_TABLE (MySQL 8 / MariaDB 10.6),则可以在单个查询中完成:

SELECT * FROM pages 
 WHERE id IN (
  SELECT * FROM JSON_TABLE(
    (SELECT JSON_ARRAYAGG(related_page_ids) FROM groups WHERE domain_id=1),'$[*][*]' columns(rel_id INTEGER path '$')) AS jt );

该列实际上需要是 JSON 类型(不是 varchar)才能工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。