我有2张桌子(活动和问题)。
活动表:
+-------------+------------+------------+
| 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中进行分析并进行第二次查询以获取流场活动或问题数据?
答案 0 :(得分: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
如果您目前正在参与某项活动,则可以交换所有问题和活动:
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
答案 1 :(得分:0)
您可以使用UNION SELECT
SELECT 'activity-' + activity_id as id, title, flow FROM activities
UNION SELECT 'question-' + question_id, question, flow FROM questions
并使用flow
在同一个(UNION)表中引用id