【问题标题】:mysql - find table name from SELECT statement over multiple tablesmysql - 从多个表的 SELECT 语句中查找表名
【发布时间】:2013-03-10 10:28:11
【问题描述】:

进行查询以从多个表中选择行...然后从那里检索必要的信息(即headline

$sql="(SELECT `headline`,`date` FROM `arts`)

UNION

(SELECT `headline`,`date` FROM `lead_news`)

UNION

(SELECT `headline`,`date` FROM `opinion_analysis`)

UNION

(SELECT `headline`,`date` FROM `politics`)

UNION

(SELECT `headline`,`date` FROM `top_news`)

UNION

(SELECT `headline`,`date` FROM `lifestyle`)

ORDER BY `date` DESC LIMIT $limit  ";
$result=mysql_query($sql);
while($row=mysql_fetch_assoc($result)){
    echo trim(htmlspecialchars_decode($row['headline']));
}

我还需要找出每个$rowtable 名称。我找到了一个解决方案here,它建议查询是:

"SELECT *, table_name as source FROM table_name" 以便$row['source'] 可以返回表名。

但我想知道是否有任何关联数组键可以从 $row 或 mysql 中的任何内置函数中检索名称?

编辑:我用以下方式编写了SELECT 命令:

SELECT `headline`,`date`, `arts` as `source` FROM `arts`

并得到错误:“字段列表”中的未知列“艺术”。 这里采用什么方式?

【问题讨论】:

  • 投票结束作为 How to find the table name which the image randomly selected from 的副本。解决方案就是解决方案。我看不出你还想实现什么。
  • 让我访问建议的链接
  • 看起来更像是错误的结构化数据库。不要使用已弃用的 mysql 调用。
  • @WigglerJtag,哪个已弃用?
  • 如果两个表中有一行,应该显示哪个表名?

标签: php mysql


【解决方案1】:
SELECT `headline`,`date`, 'arts' as `source` FROM `arts`

您要选择字符串“arts”,因此请将其放在' 引号中,而不是反引号。

但实际上,您的桌子设计似乎非常错误。除非所有这些项目都非常不同,否则您应该有 一个 具有列 category(或类似)的表,而不是每个类别一个表。

【讨论】:

  • 实际上他们存储新闻项目......每个新闻类别都有自己的表格。
  • 这就是 deceze 想说的。如果它们都是新闻项目,您应该有一个包含 NEWS ITEMS 的表。添加另一个名为“类别”的字段。
  • @JNovack,假设有成千上万的艺术、政治和体育类别的新闻帖子......所以当我想获取最近的 10 条政治条目时,存储它们不是更好吗在单独的表中而不是在单个表中?随着时间的推移,统一表可能会变得更大,从而导致速度性能问题。
  • @deceze,我在对 JNovack 的评论中解释了条目位于单独表格中的原因。
  • @Istiaque 正确配置的数据库和正确的索引表可以轻松处理数百万甚至数十亿的条目!如果您因为数据过多而遇到问题,请祝贺自己做得很好。
猜你喜欢
  • 2016-01-04
  • 2020-10-08
  • 1970-01-01
  • 2014-01-20
  • 1970-01-01
  • 2023-01-02
  • 2012-01-10
  • 2021-04-16
相关资源
最近更新 更多