-1

我有 8 张桌子.. 假设它是 x1,x2...x8。这些表的结构与以下字段相似:id、content、pageview。

浏览量统计特定 id 的浏览次数。帖子存储在具有特定 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的表名的任何解决方案?

4

1 回答 1

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 演示


只需重新阅读您的帖子,如果您正在查找哪个表包含 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
于 2013-05-04T18:29:46.023 回答