【问题标题】:MySQL ORDER CLAUSE ERRORMySQL 订单条款错误
【发布时间】:2016-02-04 10:25:03
【问题描述】:

我收到一条错误消息: “‘订单子句’中的未知列‘story2.time’”

我的 SQL 语句是:

mysql_query("SELECT headline, story2.time FROM story2 WHERE username='Michael' UNION
SELECT headline, story2.time FROM story2 JOIN subscriptions WHERE subscriptions.subpaperid = story2.artnewsid AND subscriptions.papernameurl =  story2.papernameurl AND subscriptions.username = 'Michael' UNION 
SELECT headline, story2.time FROM story2 JOIN bookmark WHERE bookmark.writername = story2.username AND bookmark.articleid = story2.random AND bookmark.username = 'Michael'
ORDER BY story2.time DESC LIMIT 0,25") or die(mysql_error());

非常感谢任何有关使以下查询工作的帮助。谢谢!

【问题讨论】:

  • 您不能使用union 按顺序引用story2 - 它不再存在。删除它 -- order by time desc...

标签: mysql join union


【解决方案1】:

您不能在order by 中使用table 别名。所以,就这样吧:

SELECT headline, story2.time
FROM story2
WHERE username='Michael'
UNION
SELECT headline, story2.time
FROM story2 JOIN
     subscriptions
WHERE subscriptions.subpaperid = story2.artnewsid AND subscriptions.papernameurl =  story2.papernameurl AND subscriptions.username = 'Michael'
UNION 
SELECT headline, story2.time
FROM story2 JOIN
     bookmark
WHERE bookmark.writername = story2.username AND bookmark.articleid = story2.random AND bookmark.username = 'Michael'
ORDER BY time DESC
LIMIT 0, 25

表名仅在union 中的每个子查询的范围内。顺便说一句,您应该使用union all,除非您有意承担删除重复项的开销。

【讨论】:

    【解决方案2】:

    联合结果的列名设置为时间,所以按时间排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 2020-07-24
      • 2014-03-19
      • 1970-01-01
      • 2019-01-05
      • 2014-07-25
      • 2015-07-25
      相关资源
      最近更新 更多