2013-05-04 24 views
-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;" 

结果来up.ok! 假设结果是一样

标识内容
13,这只是一个 19好该说什么 .. .. 。

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

任何解决方案来查找特定id的表名?

回答

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 
+0

@ user2320375 - 没问题,很高兴我能帮上忙! – sgeddes 2013-05-04 19:03:36