我尝试从具有四个索引的多个表中选择数据

时间:2012-12-20 16:15:46

标签: php mysql

我有两个表,我尝试创建一个用于管理数据的表。

第一个表是“问题”:

questions (question_id, key1, key2, key3, key4, user_id, creation_date, class, type     permission)

和另一个:

questions_keys (question_key_id, question_key_name, question_key_refers_to)

每当我按下表格中存储的提交按钮时,就会有四条记录和一条问题表。下面是一个例子:

question_keys:

1, mathematics, 0
2, history, 1
3, physics, 2
4, geography, 3

和问题表:

(1, 1, 2, 3, 4, 8, 2012-12-19 20:41:48, 4, multiple_choice,     0)

我需要的查询:在表中显示question_key_name,其中表问题中的key1,key2,key3,key4等于question_key_id。

并在一行中显示如下内容:

mathematics, history, physics, geography, multiple_choice, 2012-12-19 20:41:48

我很新,我需要你的帮助..非常感谢!

2 个答案:

答案 0 :(得分:2)

试试这个:

SELECT qk1.question_key_name qk2.question_key_name, qk3.question_key_name, 
       qk4.question_key_name, q.type, q.creation_date 
FROM questions q 
INNER JOIN question_keys qk1 ON q.key1 = qk1.question_key_id 
INNER JOIN question_keys qk2 ON q.key2 = qk2.question_key_id 
INNER JOIN question_keys qk3 ON q.key3 = qk3.question_key_id 
INNER JOIN question_keys qk4 ON q.key4 = qk4.question_key_id;

答案 1 :(得分:1)

您必须使用此设计加入表格四次:

SELECT question_key_name
FROM question_key qk
JOIN questions q on q.key1 = qk.question_key_id
WHERE q.question_id = ?

然后重复另一个3.你可以将它们全部联合起来,这将使你返回4行。

至于只返回一行,请查看GROUP_CONCAT,但这会将question_key_name值作为一列返回给您。您可能最好在应用代码中合并4行。