[英]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.