首页 > 解决方案 > 将 Order By 与 Union 结合使用 - SQL 语句

问题描述

我有一个数据库,其中包含从一个用户到另一个用户的直接消息。


表名:dm

id int(11) 主键

至:varchar

来自:varchar

消息:varchar


我有一个 SQL 语句,它从 to 和 from 列中选择不同的值,就好像它们是一列一样。($username 是一个会话变量)

"SELECT DISTINCT from
 FROM dm
 WHERE to = '$username'
 UNION
 SELECT DISTINCT to
 FROM dm
 WHERE from = '$username'
 "; 

我正在检查该用户是否基本上收到或发送了任何消息。我想按 dm 的 ID 订购。如何更改我的代码以便获得相同的结果并按 id DESC 排序?如果我像这样简单地输入 ORDER BY,我会收到一个错误,因为我没有选择它...非常感谢您的帮助

"SELECT DISTINCT from
 FROM dm
 WHERE to = '$username'
 UNION
 SELECT DISTINCT to
 FROM dm
 WHERE from = '$username'
 ORDER BY id DESC
 ";

标签: phpmysqlsql

解决方案


如果我得到了你想要做的事情,你应该把事情分开:

第一步:您的原始代码,加上添加到数据集中的用户 ID

CREATE TABLE new_table_name AS
  SELECT DISTINCT ID, from
  FROM dm
  WHERE to = '$username'
  UNION
  SELECT DISTINCT ID, to
  FROM dm
  WHERE from = '$username';

第二步:按ID订购

CREATE TABLE ordered_table AS
      SELECT *
      FROM new_table_name 
      ORDER BY ID DESC;

推荐阅读