我有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,如果它在流字段中找到活动1,那么它需要在活动表中查找活动1的信息。如果在流字段中找到问题1,则在问题表中查找问题1的信息。
如果可能,这样的复杂查询是否比从PHP PDO运行2个查询更好?查找流场,然后在PHP中对其进行分析,并进行第二次查询以获取流场活动或问题数据,是否会进行优化?
最佳答案
如果您当前有疑问,将返回下一步内容:
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
关于php - MySQL:是否可以根据第三个表中的字段值选择要从哪个表中选择?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20500997/