Php 将半重复的sql结果分组在一起
我完全不懂这个,所以请记住:) 我有一个MySQL选项卡,其中包含以下数据:Php 将半重复的sql结果分组在一起,php,html,mysql,database,Php,Html,Mysql,Database,我完全不懂这个,所以请记住:) 我有一个MySQL选项卡,其中包含以下数据: ID START END UserID 1 2017-03-16 2017-03-30 0 2 2017-05-01 2017-08-31 0 3 0000-00-00 0000-00-00 0 4 2017-03-31 2017-03-31 0 5 2017-03-09 2017-03-28 1 6 2017-03-09 2017-03-10
ID START END UserID
1 2017-03-16 2017-03-30 0
2 2017-05-01 2017-08-31 0
3 0000-00-00 0000-00-00 0
4 2017-03-31 2017-03-31 0
5 2017-03-09 2017-03-28 1
6 2017-03-09 2017-03-10 1
7 2017-03-09 2017-03-10 2
8 2017-03-09 2017-03-09 2
9 2017-03-10 2017-03-11 1
10 2017-03-10 2017-03-11 2
现在我使用MySQL查找起始列和结束列的匹配项:
SELECT t.* FROM dates t JOIN (SELECT Start, End, UserID, count(*) AS NumDuplicates FROM dates GROUP BY Start, End having NumDuplicates > 1) TSUM on t.Start = tsum.Start and t.End = tsum.End
我使用foreach和echo用PHP打印它。得到这个结果:
ID START END UserID
6 2017-03-09 2017-03-10 1
7 2017-03-09 2017-03-10 2
9 2017-03-10 2017-03-11 1
10 2017-03-10 2017-03-11 2
这正是我需要的。
在这个结果中,您可以看到ID6和ID7是匹配的,而ID9和ID10是匹配的。
我现在需要的是一个明确的方法;以某种方式将他们分开,这样很明显比赛是6-7和9-10。它们之间的简单HR是enoug,或一行中的匹配行,如下所示:
ID START END UserID
6 2017-03-09 2017-03-10 1
7 2017-03-09 2017-03-10 2
<hr/>
9 2017-03-10 2017-03-11 1
10 2017-03-10 2017-03-11 2
ID START END UserID
6 & 7 2017-03-09 2017-03-10 1 & 2
9 & 10 2017-03-10 2017-03-11 1 & 2
任何帮助都将不胜感激;谢谢 尝试下面的代码,这将对您有所帮助。 这将产生如第二个场景所示的输出
SELECT t.Start, t.End,
GROUP_CONCAT( t.ID SEPARATOR '&') AS ID,
GROUP_CONCAT( t.UserID SEPARATOR '&') AS UserID
FROM dates t
JOIN ( SELECT Start, End, UserID, COUNT(*) AS NumDuplicates
FROM dates
GROUP BY Start, End
HAVING NumDuplicates > 1 ) AS TSUM
ON t.Start = tsum.Start AND t.End = tsum.End
GROUP BY Start, End
sqlfiddle演示Hey Sagar;非常感谢。但这给了我0个结果:(