Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在两列中查找重复的mySQL结果-GROUPBY不起作用_Mysql_Group By_Duplicates - Fatal编程技术网

在两列中查找重复的mySQL结果-GROUPBY不起作用

在两列中查找重复的mySQL结果-GROUPBY不起作用,mysql,group-by,duplicates,Mysql,Group By,Duplicates,我有一个事件列表,我想为即将到来的事件找到重复的。由于同一事件可以有几个不同的事件标题,我认为这里最安全的赌注是查找当天在同一地点发生的事件,并从中手动删除重复的事件 任何提示都非常感谢 我试过了,没有日期,只是按照活动名称和地点名称进行分组,有一个类似的奇怪输出,其中唯一重复的是场馆名称和地点名称 试试这个: select main_count,a.place_name,b.event_title, b.start_date from (select count(1)as main_count

我有一个事件列表,我想为即将到来的事件找到重复的。由于同一事件可以有几个不同的事件标题,我认为这里最安全的赌注是查找当天在同一地点发生的事件,并从中手动删除重复的事件

任何提示都非常感谢

我试过了,没有日期,只是按照活动名称和地点名称进行分组,有一个类似的奇怪输出,其中唯一重复的是场馆名称和地点名称

试试这个:

select main_count,a.place_name,b.event_title, b.start_date from
(select count(1)as main_count, place_name from main WHERE start_date  >= '".$todays_date."' group by place_name having count(1) >1) as a

left join

(select  place_name, event_title, start_date from main) as b
on a.place_name = b.place_name
使用GROUP BY时,每个组只能得到一行。您选择的其他列将从组中随机选择

如果要查看重复组中的所有行,请使用查找重复项的查询连接表

SELECT t1.*
FROM main AS t1
JOIN (SELECT place_name, start_date
      FROM main 
      WHERE start_date  >= '$todays_date'
      GROUP BY start_date, place_name 
      HAVING count(*) > 1) AS t2
ON t1.place_name = t2.place_name AND t1.start_date = t2.start_date

如果startdate在第一次查询中失败,请添加具有相同场馆名称、地点名称和开始日期的记录。。尝试先在数据库中运行它,而不是用代码来模拟问题,这样可以在继续使用项目代码之前获得良好的结果。好运气为什么使用左连接而不是内连接?总是会有匹配项。谢谢@Barmar,这是一样的,但我需要更具体一点,第二个查询必须依赖于第一个查询的main。您没有在正确的列上加入,您需要在place\u name和start\u date上加入。否则你会把不同日子的活动联系在一起。是的,这是真的,我没有在where子句中包括日期。感谢Gurumarked up的解释,我得到的结果更好,但它们仍然没有成对显示,重复后重复OK我添加了t1.place\u name=t2.place\u name和t1.start\u date=t2.start\u date按开始日期排序,现在看起来不错!
select main_count,a.place_name,b.event_title, b.start_date from
(select count(1)as main_count, place_name from main WHERE start_date  >= '".$todays_date."' group by place_name having count(1) >1) as a

left join

(select  place_name, event_title, start_date from main) as b
on a.place_name = b.place_name
SELECT t1.*
FROM main AS t1
JOIN (SELECT place_name, start_date
      FROM main 
      WHERE start_date  >= '$todays_date'
      GROUP BY start_date, place_name 
      HAVING count(*) > 1) AS t2
ON t1.place_name = t2.place_name AND t1.start_date = t2.start_date