mysql - 在 mySQL 查询中组合常用值

标签 mysql sql

我有以下查询:

"SELECT DISTINCT `emails`.`to`,`emails`.`from` as fromEmail 
FROM `emails` WHERE ((`emails`.`from` = '".$loggedMember->id."') 
OR (`emails`.`to` = '".$loggedMember->id."')) 
AND (`emails`.`to` != 0) ORDER BY `id` DESC LIMIT 4"

得到如下结果:

to    fromEmail
887   1923
1923  887
1637  887
370   887

问题:如何避免前两个意义上的重复值,即使它们是相反的,它们仍然被认为是重复的“887 1923”和“1923 887”。

最佳答案

要消除重复值,您需要将电子邮件按规范顺序排列:

SELECT DISTINCT
       (case when `emails`.`to` < `emails`.`from` then `emails`.`to`
             else `emails`.`from`
        end) as email1,
       (case when `emails`.`to` >= `emails`.`from` then `emails`.`to`
             else `emails`.`from`
        end) as email2
FROM `emails`
WHERE ((`emails`.`from` = '".$loggedMember->id."')  OR (`emails`.`to` = '".$loggedMember->id."')) AND (`emails`.`to` != 0)
ORDER BY `id` DESC LIMIT 4

如果字段可以为 NULL,那么逻辑会更复杂一些,但它仍然是相同的想法:在执行 distinct 之前,以特定顺序对值进行排序。

关于mysql - 在 mySQL 查询中组合常用值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12063632/

相关文章:

php - 将用户配置文件信息与用户登录信息保存在同一数据库中

运行创建表脚本时MySQL errno 150

mysql从另一个表填充列最大值

sql - 如何根据 Google BigQuery 中的特定列值连接一列的 N 行?

mysql - 海量数据查询SOLR

mysql - 将 MySQL 数据库导入 SQL Server

php - 在表单上发布预先选中的复选框提交 PHP MYSQL

mysql - 安装 MySql 并在 Docker 镜像中加载 Dump

mysql - 将 ID 存储为逗号分隔值

sql - 查询更新表与其他表比较,如果不存在则删除