我是一个完全的菜鸟,所以请记住:)。
我有一个包含以下数据的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 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查找Start&的匹配项结束:
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
我用PHP使用foreach和echo打印它。得到这个结果:
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
这就是我需要的。 在这个结果中你可以看到ID 6& 7是匹配,9& 10是。 我现在需要的是一种明确的方法;以某种方式分开它们,这样很明显比赛是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
非常感谢任何帮助;谢谢!!!
答案 0 :(得分:0)
尝试以下代码,这将对您有所帮助。 这将给出输出,如第二场景
所示 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