我发现SQL相关问题很难用会话表达,所以请原谅我,如果没有意义的话。
我将数据从CMS数据库迁移到MySQL,我希望尽可能简化数据结构。当前类别方案具有 7个类别,并且项目与类别关系设置为多对多关系,因此需要联结表。
最好将其设置为两个一对多关系,以便不需要额外的表。我需要的实际类别设置如下:
第1类
Option 1
Option 2
第2类
Option 3
Option 4
Option 5
Option 6
Option 7
每个项目属于Category 1
的一个值,Category 2
属于一个值。这是我创建的查询的一般形式:
SELECT items.entry_id, categories.cat_id
FROM items
INNER JOIN categories
ON items.entry_id = categories.entry_id
WHERE items.item_type = 6
如何添加条件查询或子查询,以便获得SELECT
子句的结果,如:
SELECT items.entry_id, categories.cat_id1, categories.cat_id2
其中cat_id1
和cat_id2
的值是上述值吗?
**** ****更新 我在获取所需的查询方面取得了一些进展(表格太复杂了,无法在此处发布示例,但这里是一个示例查询):
SELECT exp_weblog_data.entry_id,
exp_weblog_data.field_id_27 AS Title,
exp_weblog_data.field_id_29,
exp_weblog_data.field_id_32,
exp_weblog_data.field_id_33,
exp_weblog_data.field_id_28,
exp_weblog_data.field_id_84,
exp_relationships.rel_child_id,
CASE WHEN exp_category_posts.cat_id = '15' OR exp_category_posts.cat_id = '16' THEN exp_category_posts.cat_id END as cat1,
CASE WHEN exp_category_posts.cat_id = '17' OR exp_category_posts.cat_id = '20' THEN exp_category_posts.cat_id END as cat2
FROM exp_weblog_data
INNER JOIN exp_relationships
ON exp_weblog_data.entry_id = exp_relationships.rel_parent_id
INNER JOIN exp_category_posts
ON exp_weblog_data.entry_id = exp_category_posts.entry_id
WHERE exp_weblog_data.weblog_id = 6
这为我提供了我想要的Cat1和Cat 2的两列但是这里仍然存在两个问题 - exp_category_posts上的内部连接导致每个记录有2行,其中我只想为entry_id的每个值设置一行。其次,在case语句中,如果cat_id = 15,我想设置A的值,如果cat_id = 16,我想设置B,但我似乎无法找到正确的语法而不会出错。
我希望这可以解决一些问题!
答案 0 :(得分:0)
在设置多对多关系时,没有合理的方法可以避免额外的表格。
不有多个列的多列(cat_id1
,cat_id2
,...)。
不将多个ID放在一列(“123,234,345”)中。
这两个问题都会导致比映射表更糟糕的问题。