MySQL 的联合和排序通过帮助

标签 mysql sql sql-order-by union

下面的代码有效,但是当我将 Order by id 更改为 Order by s.id 时,出现此错误

Unknown column 's.id' in 'order clause'

$construct =  "SELECT child.* FROM products child LEFT JOIN products parent on parent.name=child.parent INNER JOIN subscribe s ON (s.productid = parent.id) WHERE s.username='$logged' AND s.type='0'
        UNION
        SELECT child.* FROM products child LEFT JOIN products parent on parent.sid=child.sid INNER JOIN subscribe s ON (s.productid = parent.id) WHERE s.username='$logged' AND parent.keyword != child.name AND s.type='1'
        ORDER BY s.id DESC";

如何更改代码,使其按 s.id(订阅表的 id)排序?

最佳答案

MySQL 正在尝试将 ORDER BY 应用于 UNION,但 UNION 只有 child列(没有 child. 前缀),则没有 s.id在联盟中。但您可以添加一个:

SELECT child.*, s.id as sid ...
UNION
SELECT child.*, s.id as sid ...
ORDER BY sid DESC

您需要给它一个别名,因为 UNION 会去掉表名或别名前缀。如果有sid child 中的专栏然后使用其他内容作为 s.id 的别名.

关于MySQL 的联合和排序通过帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7278959/

相关文章:

mysql - 如何在 mySQL 中格式化日期时间?

sql - 在 MySQL 一对多中加入新列

php - 使 PHP 网关工作

php - 如何以 2013-02-27 00 :00:00 so I can use it with ORDER BY? 形式转换日期

php - MySQL 对除一行之外的所有行进行排序

php - 如何连接两个表并在php中返回结果

mysql - 如何消除相同行的重复

mysql order by timestamp desc 限制范围不起作用

mysql - 使用 Powershell 针对 MySQL 运行 MySql 存储过程脚本

mysql - 获取MySQL数据库前N行的运行频率分布