以日期分隔的Mysql查询元素组

时间:2014-01-08 22:22:08

标签: php mysql sql

我目前正在使用一个网站并将数据从转盘保存到数据库中。 每个图像都有一个位置,链接,图像网址等。

查找所有信息:sqlfiddle.com/#!2/b3920b/2/0(感谢Ollie Jones)

所以de DB看起来有点像这样:

╔═══╦════════════╦═════════════╦═════════════╦═════════════╦═════════════╦═════════════╗
 ║id ║  element   ║  position   ║   title     ║  url_link   ║   url_jpg   ║     date    ║
 ╠═══╬════════════╬═════════════╬═════════════╬═════════════╬═════════════╬═════════════╣
 ║ 1 ║ foo        ║      1      ║    title1   ║     url1    ║    jpg1     ║  20-12-2013 ║
 ║ 2 ║ foo        ║      2      ║    title2   ║     url2    ║    jpg2     ║  20-12-2013 ║
 ║ 3 ║ foo        ║      3      ║    title3   ║     url3    ║    jpg3     ║  20-12-2013 ║
 ║ 4 ║ foo        ║      4      ║    title4   ║     url4    ║    jpg4     ║  20-12-2013 ║
 ║ 5 ║ foo        ║      5      ║    title5   ║     url5    ║    jpg5     ║  20-12-2013 ║
 ║ 6 ║ foo        ║      6      ║    title6   ║     url6    ║    jpg6     ║  20-12-2013 ║
 ║ 7 ║ foo        ║      1      ║    title1   ║     url1    ║    jpg1     ║  21-12-2013 ║
 ║ 8 ║ foo        ║      2      ║    title2   ║     url2    ║    jpg2     ║  21-12-2013 ║
 ║ 9 ║ foo        ║      3      ║    title3   ║     url3    ║    jpg3     ║  21-12-2013 ║
 ║10 ║ foo        ║      4      ║    title4   ║     url4    ║    jpg4     ║  21-12-2013 ║
 ║11 ║ foo        ║      5      ║    title5   ║     url5    ║    jpg5     ║  21-12-2013 ║
 ║12 ║ foo        ║      6      ║    title6   ║     url6    ║    jpg6     ║  21-12-2013 ║
 ║13 ║ foo        ║      1      ║    title1   ║     url1    ║    jpg1     ║  22-12-2013 ║
 ║14 ║ foo        ║      2      ║    title2   ║     url2    ║    jpg2     ║  22-12-2013 ║
 ║15 ║ foo        ║      3      ║    title3   ║     url3    ║    jpg3     ║  22-12-2013 ║
 ║16 ║ foo        ║      4      ║    title4   ║     url4    ║    jpg4     ║  22-12-2013 ║
 ║17 ║ foo        ║      5      ║    title5   ║     url5    ║    jpg5     ║  22-12-2013 ║
 ║18 ║ foo        ║      6      ║    title6   ║     url6    ║    jpg6     ║  22-12-2013 ║
 ║.. ║    ...     ║     ...     ║     ...     ║     ...     ║     ...     ║      ...    ║
 ╚═══╩════════════╩═════════════╩═════════════╩═════════════╩═════════════╩═════════════╝

然后在我的报告中,我查询数据库,向我展示旋转木马中包含开始日期和结束日期的元素,如果jpg链接的位置,标题,网址发生了变化,那么它就有了向我展示任何范围...例如,之前的DB查询应该如下所示:

 ╔═════════╦═══════════╦═════════════╦═════════════╦═══════════╦══════════════════════════╗
 ║element  ║  position ║   title     ║  url_link   ║   url_jpg ║           date           ║
 ║═════════╬═══════════╬═════════════╬═════════════╬═══════════╬══════════════════════════╣
 ║ foo     ║      1    ║    title1   ║     url1    ║    jpg1   ║ 20-12-2013 to 22-12-2013 ║
 ║ foo     ║      2    ║    title2   ║     url2    ║    jpg2   ║ 20-12-2013 to 22-12-2013 ║
 ║ foo     ║      3    ║    title3   ║     url3    ║    jpg3   ║ 20-12-2013 to 22-12-2013 ║
 ║ foo     ║      4    ║    title4   ║     url4    ║    jpg4   ║ 20-12-2013 to 22-12-2013 ║
 ║ foo     ║      5    ║    title5   ║     url5    ║    jpg5   ║ 20-12-2013 to 22-12-2013 ║
 ║ foo     ║      6    ║    title6   ║     url6    ║    jpg6   ║ 20-12-2013 to 22-12-2013 ║
 ╚═════════╩═══════════╩═════════════╩═════════════╩═══════════╩══════════════════════════╝

以上使用此查询:

mysql_query("
 SELECT id, element, position, title, url_link, url_jpg, 
        (case when min(date) <> max(date) 
         then concat(min(date), ' to ', max(date)) 
         else min(date) end) as date
    FROM table 
   GROUP BY element, posistion, title, url_link, url_jpg 
   ORDER BY element, date ASC, position ASC
")

现在的问题是,当所有元素都改变但是,如下所示:

新数据库:

 ╔═══╦════════════╦═════════════╦═════════════╦═════════════╦═════════════╦═════════════╗
 ║id ║  element   ║  position   ║   title     ║  url_link   ║   url_jpg   ║     date    ║
 ╠═══╬════════════╬═════════════╬═════════════╬═════════════╬═════════════╬═════════════╣
 ║ 1 ║ foo        ║      1      ║    title1   ║     url1    ║    jpg1     ║  20-12-2013 ║
 ║ 2 ║ foo        ║      2      ║    title2   ║     url2    ║    jpg2     ║  20-12-2013 ║
 ║ 3 ║ foo        ║      3      ║    title3   ║     url3    ║    jpg3     ║  20-12-2013 ║
 ║ 4 ║ foo        ║      4      ║    title4   ║     url4    ║    jpg4     ║  20-12-2013 ║
 ║ 5 ║ foo        ║      5      ║    title5   ║     url5    ║    jpg5     ║  20-12-2013 ║
 ║ 6 ║ foo        ║      6      ║    title6   ║     url6    ║    jpg6     ║  20-12-2013 ║
 ║ 7 ║ foo        ║      1      ║    title1   ║     url1    ║    jpg1     ║  21-12-2013 ║
 ║ 8 ║ foo        ║      2      ║  newtitle2  ║     url2    ║    jpg2     ║  21-12-2013 ║
 ║ 9 ║ foo        ║      3      ║  newtitle3  ║     url3    ║    jpg3     ║  21-12-2013 ║
 ║10 ║ foo        ║      4      ║  newtitle4  ║     url4    ║    jpg4     ║  21-12-2013 ║
 ║11 ║ foo        ║      5      ║  newtitle5  ║     url5    ║    jpg5     ║  21-12-2013 ║
 ║12 ║ foo        ║      6      ║  newtitle6  ║     url6    ║    jpg6     ║  21-12-2013 ║
 ║13 ║ foo        ║      1      ║     title1  ║     url1    ║    jpg1     ║  22-12-2013 ║
 ║14 ║ foo        ║      2      ║  newtitle2  ║     url2    ║    jpg2     ║  22-12-2013 ║
 ║15 ║ foo        ║      3      ║  newtitle3  ║     url3    ║    jpg3     ║  22-12-2013 ║
 ║16 ║ foo        ║      4      ║  newtitle4  ║     url4    ║    jpg4     ║  22-12-2013 ║
 ║17 ║ foo        ║      5      ║  newtitle5  ║     url5    ║    jpg5     ║  22-12-2013 ║
 ║18 ║ foo        ║      6      ║  newtitle6  ║     url6    ║    jpg6     ║  22-12-2013 ║
 ║.. ║    ...     ║     ...     ║     ...     ║     ...     ║     ...     ║      ...    ║
 ╚═══╩════════════╩═════════════╩═════════════╩═════════════╩═════════════╩═════════════╝

同样的查询会告诉我:

 ╔═════════╦═══════════╦═════════════╦═════════════╦═══════════╦═════════════╗
 ║element  ║  position ║   title     ║  url_link   ║   url_jpg ║   date      ║
 ║═════════╬═══════════╬═════════════╬═════════════╬═══════════╬═════════════╣
 ║ foo     ║      2    ║    title2   ║     url2    ║    jpg2   ║ 20-12-2013  ║
 ║ foo     ║      3    ║    title3   ║     url3    ║    jpg3   ║ 20-12-2013  ║
 ║ foo     ║      4    ║    title4   ║     url4    ║    jpg4   ║ 20-12-2013  ║
 ║ foo     ║      5    ║    title5   ║     url5    ║    jpg5   ║ 20-12-2013  ║
 ║ foo     ║      6    ║    title6   ║     url6    ║    jpg6   ║ 20-12-2013  ║
 ╚═════════╩═══════════╩═════════════╩═════════════╩═══════════╩═════════════╝
 ╔═════════╦═══════════╦═════════════╦═════════════╦═══════════╦══════════════════════════╗
 ║element  ║  position ║   title     ║  url_link   ║   url_jpg ║           date           ║
 ║═════════╬═══════════╬═════════════╬═════════════╬═══════════╬══════════════════════════╣
 ║ foo     ║      1    ║    title1   ║     url2    ║    jpg2   ║ 20-12-2013 to 22-12-2013 ║
 ╚═════════╩═══════════╩═════════════╩═════════════╩═══════════╩══════════════════════════╝
 ╔═════════╦═══════════╦═════════════╦═════════════╦═══════════╦══════════════════════════╗
 ║element  ║  position ║   title     ║  url_link   ║   url_jpg ║           date           ║
 ║═════════╬═══════════╬═════════════╬═════════════╬═══════════╬══════════════════════════╣
 ║ foo     ║      2    ║    title2   ║     url2    ║    jpg2   ║ 21-12-2013 to 22-12-2013 ║
 ║ foo     ║      3    ║    title3   ║     url3    ║    jpg3   ║ 21-12-2013 to 22-12-2013 ║
 ║ foo     ║      4    ║    title4   ║     url4    ║    jpg4   ║ 21-12-2013 to 22-12-2013 ║
 ║ foo     ║      5    ║    title5   ║     url5    ║    jpg5   ║ 21-12-2013 to 22-12-2013 ║
 ║ foo     ║      6    ║    title6   ║     url6    ║    jpg6   ║ 21-12-2013 to 22-12-2013 ║
 ╚═════════╩═══════════╩═════════════╩═════════════╩═══════════╩══════════════════════════╝

我希望它能告诉我这个:

 ╔═════════╦═══════════╦═════════════╦═════════════╦═══════════╦════════════╗
 ║element  ║  position ║   title     ║  url_link   ║   url_jpg ║  date      ║
 ║═════════╬═══════════╬═════════════╬═════════════╬═══════════╬════════════╣
 ║ foo     ║      1    ║    title1   ║     url1    ║    jpg1   ║ 20-12-2013 ║
 ║ foo     ║      2    ║    title2   ║     url2    ║    jpg2   ║ 20-12-2013 ║
 ║ foo     ║      3    ║    title3   ║     url3    ║    jpg3   ║ 20-12-2013 ║
 ║ foo     ║      4    ║    title4   ║     url4    ║    jpg4   ║ 20-12-2013 ║
 ║ foo     ║      5    ║    title5   ║     url5    ║    jpg5   ║ 20-12-2013 ║
 ║ foo     ║      6    ║    title6   ║     url6    ║    jpg6   ║ 20-12-2013 ║
 ╚═════════╩═══════════╩═════════════╩═════════════╩═══════════╩════════════╝

 ╔═════════╦═══════════╦═════════════╦═════════════╦═══════════╦══════════════════════════╗
 ║element  ║  position ║   title     ║  url_link   ║   url_jpg ║           date           ║
 ║═════════╬═══════════╬═════════════╬═════════════╬═══════════╬══════════════════════════╣
 ║ foo     ║      1    ║    title1   ║     url1    ║    jpg1   ║ 21-12-2013 to 22-12-2013 ║
 ║ foo     ║      2    ║ newtitle2   ║     url2    ║    jpg2   ║ 21-12-2013 to 22-12-2013 ║
 ║ foo     ║      3    ║ newtitle3   ║     url3    ║    jpg3   ║ 21-12-2013 to 22-12-2013 ║
 ║ foo     ║      4    ║ newtitle4   ║     url4    ║    jpg4   ║ 21-12-2013 to 22-12-2013 ║
 ║ foo     ║      5    ║ newtitle5   ║     url5    ║    jpg5   ║ 21-12-2013 to 22-12-2013 ║
 ║ foo     ║      6    ║ newtitle6   ║     url6    ║    jpg6   ║ 21-12-2013 to 22-12-2013 ║
 ╚═════════╩═══════════╩═════════════╩═════════════╩═══════════╩══════════════════════════╝

(要将它们分成php文件中的表,我在日期更改时创建一个新表)

所以我不知道如何更改查询,因此带有title1的元素会分成两个表,因为GROUP日期发生了变化。 :(

希望很好解释,这真让我头疼。 提前谢谢你。

1 个答案:

答案 0 :(得分:0)

我认为您遇到的问题是由于您的结果集日期列的ORDERING问题。我的小提琴(这里)使用实际的DATE值,而不是dd-mm-yyyy值,因为我们希望它们正确排序。 http://sqlfiddle.com/#!2/b3920b/4/0此外,我正在使用此

    ORDER BY element, MIN(date), MAX(date), position ASC

请注意,第二个数据集的第1行,第7行,第13行将组合成一个结果行,日期范围为2013-12-20到2013-12-22。

你的SQL中有一个小错误..你不想

     SELECT id, ....

因为你的GROUP BY中没有提到它。见这里:http://sqlfiddle.com/#!2/b3920b/3/0