запрос mysql для отображения каждого дня между полями start_date и end_date?

#php #mysql

#php #mysql

Вопрос:

У меня есть база данных со следующими полями: start_date, end_date, канал, позиция, рекламодатель, пользователь.

Я хочу, чтобы это отображалось как на изображении (http://business-review-webinars.com/table.jpg ). разделенные по каналу (программное обеспечение, ent-приложение, с открытым исходным кодом …) и по дате (сегодня, завтра, послезавтра …)

Я знаю, что могу получать результаты за каждый день с помощью этого:

 SELECT * FROM table WHERE '2011-06-13' BETWEEN start_date AND end_date
  

и это отобразило бы все, что происходит сегодня. но у меня возникли проблемы, пытаясь выяснить, как сделать так, чтобы он отображался аккуратно для каждого отдельного канала.

Думаю, я мог бы выполнить по 1 запросу для каждого канала, но у меня около 50 каналов, и если я буду выполнять по 1 запросу на каждый день, у меня будут сотни запросов на странице.. думаю, не очень хорошо..

есть идеи?

Комментарии:

1. Я бы собрал все необходимые данные и поместил результаты запроса в двумерный массив — $table[channel][day][] = $row;

Ответ №1:

Я думаю, что вы, по сути, ищете представление ваших данных в виде «перекрестной таблицы».

http://dev.mysql.com/tech-resources/articles/wizard/print_version.html

и

http://rpbouman.blogspot.com/2005/10/creating-crosstabs-in-mysql.html

вот несколько ссылок, которые у меня есть в закладках, которые могут вам помочь.

Комментарии:

1. это именно то, что мне было нужно 🙂 ВЫБЕРИТЕ канал (‘2011-06-13’ МЕЖДУ start_date И end_date) В КАЧЕСТВЕ Date1, (‘2011-06-14’ МЕЖДУ start_date И end_date) В КАЧЕСТВЕ Date2, (‘2011-06-15’ МЕЖДУ start_date И end_date) В КАЧЕСТВЕ Date3 Из группы таблиц По каналу