我正在运行以下查询,除非存在重复记录(除了 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/