php - 如何选择几乎不同的行,包括 mysql 中非不同的列(来自 php)

标签 php mysql sql group-by distinct

我正在运行以下查询,除非存在重复记录(除了 id(主键,int)字段和修改的(时间戳)列之外的重复,有许多列被重复。 这些重复是人们在表单上多次点击提交按钮的结果(也必须解决这个问题,但这是另一个问题)。 这是查询:

$sql = "SELECT COUNT(id) AS rcount,
    SUM(num_guests) AS gcount,
    DATE_FORMAT(modifed, '%%m-%%Y') AS adate,
    SUM(1st_visit REGEXP '^no') AS repeat_guest
    FROM reservation_stats
    WHERE establishmentid = %i
    AND num_guests > 0
    GROUP BY adate
    ORDER BY added";

我不希望 SUM 包含重复项。我正在使用 mysql 和 php。

谢谢

PS表结构:

 id     int(10)          
establishmentid     int(11)         
name    varchar(50)     
email   varchar(100)    
phone   varchar(30)     
num_guests  int(11)         

reservation_time    varchar(50)     
reservation_date    date            
1st_visit   varchar(10)     
data    text    
added   date        
modifed     timestamp 

PPS:我的查询现在是在 Tom 的建议之后:

 $sql = "SELECT COUNT(*) as rcount, SUM(num_guests) AS gcount, 
DATE_FORMAT(added, '%%m-%%Y') AS adate, 
1 as repeat_guest 
FROM 
( SELECT added, name, email, phone, num_guests, 
  reservation_time, reservation_date 
FROM reservation_stats where establishmentid = %i 
GROUP BY added, name, email, phone, num_guests, 
  reservation_time, reservation_date 
\) dup 
group by adate 
order by added";

谢谢汤姆。除非我丢失了原始查询中的repeat_guest 数据,否则这是有效的。我该如何保存它?

PPPS:等等,这个怎么样:

        $sql = "SELECT COUNT(*) as rcount, SUM(num_guests) AS gcount, DATE_FORMAT(added, '%%m-%%Y') AS adate,    SUM(repeat_guest)                       
            FROM
            (
             SELECT  added, name, email, phone, num_guests, reservation_time, reservation_date, SUM(1st_visit REGEXP '^no') AS repeat_guest
             FROM    reservation_stats
             where establishmentid = %i
             GROUP BY added, name, email, phone, num_guests, reservation_time, reservation_date
            ) dup
            group by adate order by added";

似乎有效,但它是否按照我的想法进行?

最佳答案

您可以执行类似的操作,其中FIELD1、FIELD2 和FIELD3 是可能重复的字段(以及num_guests):

SELECT COUNT(*) rcount, SUM(num_guests) AS gcount

FROM
(
 SELECT  FIELD1, FIELD2, FIELD3, num_guests
 FROM    YOUR_TABLE
 GROUP BY FIELD1, FIELD2, FIELD3, num_guests
) dup

关于php - 如何选择几乎不同的行,包括 mysql 中非不同的列(来自 php),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13092632/

相关文章:

php - javascript限制文本区域的显示链接

php - 在对象上下文中运行的回调函数?

PHP 日期与 MySQL 日期字段的比较

javascript - 单击提交按钮时未完成验证

Python、XML 和 MySQL - ascii v utf8 编码问题

mysql - 加速 Laravel Eloquent/MySQL 查询

mysql - NIFI JDBC 连接到 MariaDB UTF8 支持

mysql - YEAR(AVG(UNIX(date))) 与 ROUND(AVG(YEAR(date))) 不同

sql - 在时间戳列上为使用年份函数的查询创建索引

sql - MSSQL 中的 INSERT 触发器 : destination table by Variable