2013-12-10 93 views
0

我有2个表格(活动和问题)。MySQL:您可以根据第三个表中的字段值来选择要从哪个表中选择?

活动表:

+-------------+------------+------------+ 
| activity_id | title  | flow  | 
+-------------+------------+------------+ 
| 1   | Activity 1 | question-2 | 
+-------------+------------+------------+ 
| 2   | Activity 2 | activity-3 | 
+-------------+------------+------------+ 

问题表:

+-------------+-----------------+------------+ 
| question_id | question  | flow  | 
+-------------+-----------------+------------+ 
| 1   | Lorem ipsum...? | activity-1 | 
+-------------+-----------------+------------+ 
| 2   | Lorem ipsum...? | question-3 | 
+-------------+-----------------+------------+ 
| 3   | Lorem ipsum...? | activity-2 | 
+-------------+-----------------+------------+ 

我所要做的,就是如果我想看看,看看那里的用户的特定问题或活动后流,然后在一个查询中查找该问题或活动数据,我该怎么做?

有没有办法在MySQL中分析流场并从相应的表和id中提取数据。例如,如果我知道用户在问题2(question_id:2)中,并且我想查询问题2之后的项目的标题/问题和流程字段(这是问题3在此处案例(流程:问题-3)),我将如何在一个查询中执行此操作。

我希望这是因为。我可以告诉MySQL,如果它在流场中找到activity-1,那么它需要在活动表中查找活动1的信息。如果在流场中发现问题1,则在问题表中查找问题1的信息。

如果可能,像这样的复杂查询比运行PHP PDO的2个查询更好吗?它会更好地查找流场,然后在PHP中进行分析,并有第二个查询来获取流场活动或问题数据?

回答

1

如果你现在走的问题,这将返回你走到哪里下一页:

SELECT q.flow next, a.title text, a.flow 
FROM activities a 
JOIN questions q ON CONCAT('activity-', a.activity_id) = q.flow 
WHERE q.question_id = $current_question 
UNION ALL 
SELECT q2.flow next, q1.question text, q1.flow 
FROM questions q1 
JOIN questions q2 ON CONCAT('question-', q1.question_id) = q2.flow 
WHERE q.question_id = $current_question 

DEMO

如果您目前正在进行一项活动,请将所有问题和活动对换:

SELECT a.flow next, q.question text, q.flow 
FROM questions q 
JOIN activities a ON CONCAT('question-', q.question_id) = a.flow 
WHERE a.activity_id = $current_activity 
UNION ALL 
SELECT a2.flow next, a1.title text, a2.flow 
FROM activities a1 
JOIN activities a2 ON CONCAT('activity-', a1.activity_id) = a2.flow 
WHERE a.activity_id = $current_activity 
0

你可以使用UNION SELECT

SELECT 'activity-' + activity_id as id, title, flow FROM activities 
UNION SELECT 'question-' + question_id, question, flow FROM questions 

,并使用flowid在同一(UNION)表

相关问题