首页 > 解决方案 > MySQL将JSON列转换为数组并获取页面

问题描述

选书名太难了,见谅!

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

页面

团体

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

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

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

标签: mysqlmany-to-manymysql-json

解决方案


如果您有权访问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)才能正常工作。


推荐阅读