如何使用子查询作为表名?

时间:2015-12-28 19:24:38

标签: php mysql subquery

我有两个帖子表,还有一个检查其中一个帖子表的中间人表。

// Post1                                // Post2
+----+--------+--------------+           +----+--------+--------------+
| id | title  |   content    |           | id | title  |   content    |
+----+--------+--------------+           +----+--------+--------------+
| 1  | how    | are you?     |           | 1  | nice   | to meet you  |
+----+--------+--------------+           +----+--------+--------------+


// Middleman
+------------+------------+
| table_code | table_name |
+------------+------------+
| 100        | Post1      |
| 101        | Post2      |
+------------+------------+

我也有这样的投票表:

+----+---------+------------+---------+-------+-----------+
| id | post_id | table_code | user_id | value | timestamp |
+----+---------+------------+---------+-------+-----------+
| 1  | 1       | 101        | xxx     | -1    | xxx       |
+----+---------+------------+---------+-------+-----------+

现在,我希望获得投票的{{1>}(很好)和title见到你)。实际上我想要的是使用content - 表作为数组(给Middleman并得到table_code),然后使用table_name来选择考虑过的帖子。

换句话说,我有两个参数:table_name$post_id = 1。现在我想在$table_code = 101表格中选择第一个帖子(Post2根据Post2)。像这样:

101

但它不起作用,我该如何解决?

注意:根据个人原因,我不想使用PHP数组而不是select title, content from (select table_name from Middleman where table_code = 101) where id = 1; 表。

1 个答案:

答案 0 :(得分:1)

我不确定是否可能,通常我们通过重新组织架构找到解决方案。首先,我们需要两个表:post1和post2都具有基本相同的模式吗?如果我们可以只有一个表帖子包含id,title,content并摆脱Middleman表,我们可能已经解决了这个问题。除了table_code之外,Votes表将包含所有列。然后您可以轻松查询:

select p.title, p.content from Post p join Votes v on p.id = v.post_id where v.post_id = 1;