我认为从根本上说,我不明白如何完成连接2个表使用相关的表在一起,我需要帮助.

  1. I have one table called '表单选项列表' it has 3 columns (id, name, active)
  2. A relate table called '表单选项列表表单选项relates' it has 3 columns(id, 表单选项列表_id, 表单选项_id)
  3. and finally a '表单选项' table that has 3 columns (id, name, value)

表值大致表示如下:

表单选项列表

id |   name   | active
---------------------
1  | statuses | 1

表单选项列表表单选项relates

id | 表单选项列表_id | 表单选项_id
------------------------------------
1  | 1                  | 1    
2  | 1                  | 2   
3  | 1                  | 3

表单选项

id | name                   | value
------------------------------------
1  | Successfully Purchased | success    
2  | Shipping Error         | shipping_error   
3  | Failed Payment         | failed_payment

我正在try 构建的是一个查询中的以下内容.

[{name: statues, 
     options:[
         {name: 'Successfully Purchased', value: 'success'},
         {name: 'Shipping Error, value: 'shipping_error'},
         {name: 'Failed Payment', value: 'failed_payment'}
     ]
}]

我用php和pdo查询MySQL

我所能做的是生成如下内容:

[{"options":"1,2,3,"}]

使用下面的测试查询(此时我只是试图理解SQL,没有必要 comments 我没有使用占位符等.

$this->db->select(
    'GROUP_CONCAT(DISTINCT 表单选项_id) as options'.self::from.self::表单选项列表表单选项relates
        .self::leftJoin.self::表单选项
        .self::on
        .self::表单选项列表表单选项relates.'.表单选项_id'
        .self::equals.self::表单选项列表表单选项relates.'.表单选项_id'
    .self::where.'表单选项列表_id = 1'
    .' GROUP BY 表单选项列表_id'
);

上面打印的内容如下:

SELECT GROUP_CONCAT(DISTINCT 表单选项_id) as options 
FROM 表单选项列表表单选项relates 
LEFT JOIN _表单选项 ON 表单选项列表表单选项relates.表单选项_id = 表单选项列表表单选项relates.表单选项_id 
WHERE 表单选项列表_id = 1 
GROUP BY 表单选项列表_id

我知道,从根本上说,我试图实现的目标是可能的.但我不确定怎么go 那里.如有任何帮助,我们不胜感激.

推荐答案

使用JSON_OBJECT创建对象,使用JSON_ARRAYAGG()将组内的值合并到数组中.

然后将所有3张表连接起来.

SELECT JSON_OBJECT(
        'name', l.name,
        'options', JSON_ARRAYAGG(
            JSON_OBJECT(
                'name', o.name,
                'value', o.value
            )
        )
    ) AS result
FROM formoptionslist AS l
LEFT JOIN formoptionslistformoptionsrelates AS ol ON l.id = ol.formoptionslist_id
LEFT JOIN formoptions AS o ON o.id = formoptions_id
WHERE l.id = 1
GROUP BY l.id

DEMO

Php相关问答推荐

提交表格后的重定向不起作用

使用WooCommerce本机产品短码时不考虑价格筛选(_SHORT CODE)

如何优化-PHP 7.3.14+Laravel 6

在WooCommerce我的帐户部分添加带有自定义链接的自定义菜单项

将部分产品排除在WooCommerce的计算附加费之外

列出所有WooCommerce处理订单中的产品数量,SKU和品牌

在WordPress中从CPT中删除插件

Laravel Http::get not working on controller

shell_exec运行大型数据处理

execute_query 和prepare+execute 有什么区别?

woocommerce_available_ payment_gateways 过滤器挂钩多次触发

在 Woocommerce 邮箱订单中显示产品 GTIN

根据页面以及是否在促销,向 WooCommerce 中显示的价格添加前缀

WooCommerce:如果购物车中已存在产品,则增加购物车商品数量

由于 PHP 版本不受支持,如何终止 PHP 脚本?

根据所选付款方式更改 WooCommerce 提交结帐按钮文本

如何使用不同的方法编写嵌套连接查询并将两列连接成一列在 laravel 查询生成器中

为什么 AJAX 请求没有通过 is_ajax_request() codeigniter 的条件?

标头内容类型:image/jpeg 无效

在管理表单字段中