我试图做这样的事情(这是MySQL格式)
SELECT q.question_id, q.question, q.answer
FROM relationship r, questions q
WHERE r.cat_id =1
AND r.question_id = q.question_id
LIMIT 0 , 30
所以,我把问题存储在一个表中,然后是另一个表中的类别。我设置了关系表,以便问题可以分为多个类别。所以说一个问题的id为5,并且它在3个不同的类别中,关系表看起来像这样
relation_id, question_id, category_id
1 5 1
2 5 2
3 5 3
4 6 1
所以,说我想得到cat_id为1的所有问题,我应该得到2个结果。这基本上就是我要做的。
答案 0 :(得分:3)
如果你想要cat_id
为1的所有问题,那么你想要这个:
select q.question, q.answer
from questions q
join relationship r on q.question_id = r.question_id
where r.cat_id = 1
我在WHERE子句中切换到ANSI连接语法而不是隐含的连接条件,因为显式版本有助于避免某些类型的错误;特别是,ANSI连接有助于避免意外交叉产品,这就是你的“MySQL格式”查询所具有的,因为你忽略了包含category
的连接条件。这种偶然的交叉产品几乎可以肯定是“每次退货3次”问题的来源。
答案 1 :(得分:1)
SELECT q.question, q.answer
FROM questions q
left join category c on q.catID = c.catID
left join relationship r on q.relID = r.relID
这样的事情将成为技巧