在MySQL中如何查看子ID数组?

时间:2017-11-19 13:02:07

标签: mysql database

我在MySQL中有一个名为bundles的表,这个表有一个名为attractions_array的列,它是一个逗号分隔的"吸引子ID"例如41,13,60

attractions是数据库中的另一个表格,其中包含有关这些景点的所有信息。

我已经弄清楚如何使用以下代码从数组中获取第一个ID:substring_index(attractions_array,',',1)但这并不太有用。

我需要从他们自己的attractions表中检查这些ID中的每一个来执行以下操作:

  • 平均&所有景点的总价
  • 确保景点仍然可用
  • 等...

如何才能在MySQL中实现这一目标?我甚至不知道从哪里开始寻找。

如果MySQL是PHP,我可能会写这样的东西来完成工作:

foreach ($bundles as $bundle) {

    // init pricing
    $bundle->price_count = 0;
    $bundle->price_total = 0;

    // each of the attractions
    $attractions = explode(",", $bundle->attractions_array);
    foreach ($attractions as $attraction) {

        // no longer available
        if (!$attraction->available) {
            continue 2;
        }

        // count pricing
        $bundle->price_count++;
        $bundle->price_total += $attraction->price;

    }

    // average pricing
    $bundle->price_average = $bundle->price_total / $bundle->price_count;

}

我目前的陈述

SELECT * FROM `bundles` LIMIT 0,10

在MySQL中甚至可以这样吗?

1 个答案:

答案 0 :(得分:1)

遵循关系模型方法,您应该在表格'捆绑'之间建立关系。和桌子的景点'这不是基于像你一样的字段中的id列表。如果'捆绑'之间的关系?和'景点'是多对多,这意味着捆绑可以有很多景点和景点可以与许多捆绑相关,你需要做这样的事情:

table bundles               pivot table              table attractions

  id   name            id_bundles  id_attract             id  name 

在您的数据透视表中,id_bundles和id_attract相对于捆绑和吸引力具有外键约束。

通过简单的连接,您将能够轻松地检索您需要的内容。

用于检索与一个捆绑包相关的所有景点的MySQL查询示例可以是:

SELECT * FROM attractions JOIN pivot_table ON (pivot_table.id = attractions.id) where pivot_table.id = customIdbundles

其中customIdbundles是您需要信息的捆绑包的ID。