将半重复的sql结果组合在一起

时间:2017-03-10 11:27:03

标签: 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  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

非常感谢任何帮助;谢谢!!!

1 个答案:

答案 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