我在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中甚至可以这样吗?
答案 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。