我有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/

10-11 09:14
查看更多