查找表名

时间:2013-05-04 18:20:48

标签: php mysql algorithm

我有8张桌子......假设它是x1,x2 ...... x8。 这些表具有类似的结构,其字段为:id,content,pageview。

Pageview计算特定ID的观看次数。 post's存储在具有特定id的行中。

我希望从这8个表格的网页浏览中找到第一个前10个帖子。

我用过:

$sql="select id,content from x1,x2,x3,x4,x5,x6,x7,x8 ORDER by pageview;"

结果出现了! 假设结果就像

Id内容
13这只是一个 19还好说什么 .. ..

在这个结果中我想找到这个ID:19属于哪个表? 我可以运行循环来匹配内容,但这不会足够快和良好的逻辑..

找到特定ID的表名的任何解决方案?

1 个答案:

答案 0 :(得分:2)

如果每个表中的字段名称相同,则示例查询将不会按原样运行。更不用说你生产笛卡尔产品,因为你没有加入任何领域。

我认为您可能正在寻找UNION

select *
from (
   select 'x1' as whichtable, id, content, pageview from x1
   union
   select 'x2' as whichtable, id, content, pageview from x2
   ...
   union
   select 'x8' as whichtable, id, content, pageview from x8
) t
order by pageview

然后,您可以使用whichtable字段查看结果来自哪个表。

以下是SQL Fiddle Demo示例。


重新阅读你的帖子,如果你正在寻找哪个表包含ID 19,那么你可以在上面的查询中添加一个where子句:

select *
from (
   select 'x1' as whichtable, id, content, pageview from x1
   union
   select 'x2' as whichtable, id, content, pageview from x2
   ...
   union
   select 'x8' as whichtable, id, content, pageview from x8
) t
where id = 19
order by pageview