2014-01-08 2 views
0

Im currenty crwaling на сайте и сохранение в БД всех изображений из карусели. каждый из этих изображений имеет позицию, ссылки, изображения URL и т.д.Группы элементов запроса Mysql, разделенные датами

findle со всеми деталями: sqlfiddle.com/#!2/b3920b/2/0 (благодаря Олли Джонс)

Так де 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 ║ 
║.. ║ ...  ║  ...  ║  ...  ║  ...  ║  ...  ║  ... ║ 
╚═══╩════════════╩═════════════╩═════════════╩═════════════╩═════════════╩═════════════╝ 

И затем в моих отчетах я запрашиваю базу данных, чтобы показать мне, какой элемент присутствовал в карусели с датой начала и конечной датой, если есть изменение в позиции, заголовке, URL-ссылке ссылки jpg, тогда оно действительно должно покажите мне какой-либо диапазон ... например, запрос БД должен выглядеть так:

╔═════════╦═══════════╦═════════════╦═════════════╦═══════════╦══════════════════════════╗ 
║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 
") 

Теперь проблема в том, что, когда все элементы меняются, но один, как это:

новый 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  ║ 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

Было бы намного полезнее, если бы вы создали [SQLFiddle] (http://sqlfiddle.com) вместо приятного создания ascii. –

+0

Поскольку вы группируете свои данные с помощью 'element, posistion, title, url_link, url_jpg', если вы видите, что данные, которые вы показываете, имеют две строки внутри этой группы (foo, 1, title1, url1, jpg1), которые будут отделять ваши данные, вашего дела. Возможно, если вы выберете титул из группы, он должен дать вам свой результат. Попробуйте и дайте мне знать. –

+0

Вот скрипка. http://sqlfiddle.com/#!2/b3920b/2/0 –

ответ

0

Я считаю, что проблема, которую вы видите, это связано с упорядочением проблем с датой колонки вашего Resultset в. Моя Fiddle (здесь) использует фактические значения DATE, а не значения дд-мм-гггг, потому что мы хотим, чтобы они правильно сортировать. http://sqlfiddle.com/#!2/b3920b/4/0 Кроме того, я использую этот

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

Обратите внимание, что строки 1, 7, 13 из вашего второго набора данных объединяет GROUP в единую результирующую строку с диапазоном дат 2013-12-20 - 2013-12-22.

Там есть небольшая ошибка в вашем SQL .. вы не хотите

 SELECT id, .... 

, потому что он не упоминается в вашей GROUP BY. См. Здесь: http://sqlfiddle.com/#!2/b3920b/3/0

+0

, но title1 должен быть единственным результатом для дня 20-го дня, а затем второго ряда от 21 до 22 – gepex

+0

@gepex, почему? ваши входные строки для title1 объединяются в соответствии с вашим запросом. Я не могу сказать из ваших данных или вашего запроса, какой критерий должен приводить к тому, что строка 1 будет группироваться отдельно от строк 7 и 13. –

Смежные вопросы