我正在建立一个需要健身运动及其设备的数据库。
我的数据库设计如下
+-------+-----------------+
| 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
非常感谢:)
答案 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'))
所以这个查询会