我有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的表名的任何解决方案?
答案 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