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