2013-12-10 138 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)表

相關問題