所以基本上我收到了关于我网站上新内容的通知。我有4张桌子 -
每个表都有一组自己的列(如果有人想要,我可以包含这些列)。每个表都有一个不同的列,这是 timestamp 列( big int 格式化列,其中包含来自PHP time()函数的数据)。我获得最后30次修改的解决方案是从按时间戳降序排序的这4个表中选择前30行。
这是我到目前为止的查询,它不起作用,我想知道是否有人可以帮助我。 -
SELECT * FROM `articles`
UNION SELECT * FROM `media`
UNION SELECT * FROM `updates`
UNION SELECT * FROM `comments`
ORDER BY `timestamp` DESC
LIMIT 30
修改 我之前也在使用另一个查询 -
SELECT * FROM `articles` ,`media` ,`updates` ,`comments`
ORDER BY `timestamp` DESC
LIMIT 30
并不断收到此错误 - 订单子句中的列'timestamp'不明确
编辑2
我现在意识到我必须在我的语句中使用 AS 子句将这些结果合并到一个表中。
答案 0 :(得分:3)
SELECT a.*,m.*,u.*,c.* from articles AS a
LEFT JOIN media AS m ON (m.timestamp = a.timestamp)
LEFT JOIN updates AS u ON (u.timestamp = a.timestamp)
LEFT JOIN comments AS c ON (c.timestamp = a.timestamp)
ORDER BY timestamp desc LIMIT 30
答案 1 :(得分:0)
您的工会可以工作,但前提是您可以创建某种公共字段列表。例如,假设每个表中都有一个描述字段,名称不同。像这样的东西会起作用......
SELECT TimeStamp,'Articles',Art_desc AS Description FROM articles
UNION ALL
SELECT TimeStamp,'Media',Media_Desc FROM Media
UNION ALL
SELECT TimeStamp,'Updates',Update_Desc FROM Updates
UNION ALL
SELECT TimeStamp,'Comments',Comment FROM Comments
ORDER BY timeStamp DESC LIMIT 30
实质上,您正在创建3个一致列的结果集,因此在这种情况下UNION将起作用。