繁体   English   中英

MySQL查询元素组以日期分隔

[英]Mysql query element groups separated by dates

目前,我正在浏览一个网站,并将轮播中的所有图像保存到数据库。 每个图片都有位置,链接,图片网址等。

找到所有信息: 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链接的位置,标题,URL发生了变化,则它不必告诉我任何范围...例如,之前的数据库查询应如下所示:

 ╔═════════╦═══════════╦═════════════╦═════════════╦═══════════╦══════════════════════════╗
 ║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文件中的表,当日期更改时,我创建了一个新表)

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

希望能很好地解释,这确实让我头疼。 先感谢您。

我相信您看到的问题是由于结果集的日期列的订购问题引起的。 我的小提琴(此处)使用实际的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM