在多主键表中选择查询

时间:2015-06-18 17:57:22

标签: mysql

我正在建立一个需要健身运动及其设备的数据库。

我的数据库设计如下

+-------+-----------------+ | id(pk)| equip(pk) | +-------+-----------------+ | 1 | Barbell | | 1 | Bench | | 2 | Dumbbell | | 2 | Bench | | 3 | Barbell | | 4 | Dumbbell | | ... | ..(many rows).. | +-------+-----------------+

id表示某项运动,需要装备才能选择该运动

因此,对于练习1(id = 1),你需要一个杠铃和长凳。 但是对于练习3(id = 3)你只需要一个杠铃

因此,如果用户想要包含Barbell和Bench的练习,则应选择id 1和3

当前查询

SELECT * FROM( SELECT id, GROUP_CONCAT(equip SEPARATOR ', ') equip
FROM equip group by id ) as x

这给出了以下结果 +-------+-----------------+ | id(pk)| equip(pk) | +-------+-----------------+ | 1 | Barbell, Bench | | 2 | Dumbbell, Bench | | 3 | Barbell | | 4 | Dumbbell | | ... | ..(many rows).. | +-------+-----------------+ 因此,如果我想搜索Barbell和Bench,则应选择1和3 非常感谢:)

1 个答案:

答案 0 :(得分:0)

我认为,而不是解释您的预期结果,只需解释您尝试实施的业务规则,并让我们深入了解您正在处理的环境。

另外,“杠铃和板凳是真的”是什么意思? Varchar字段不能为true或false。

例如,您的最后一行讨论了权重和支持,这些权重和支持未包含在您的数据集中,可能有助于回答问题。因为我没有评论代表,所以我不得不创建一个答案,所以这里是我最好的镜头而没有更多的信息:

select * from (
SELECT id, GROUP_CONCAT(equip SEPARATOR ', ') concatenatedEquip
FROM table GROUP BY id )
where (concatenatedEquip contains('Barbell') or concatenatedEquip 
contains('Bench'))

所以这个查询会