Вывести денные отдельно для каждой даты

140
13 октября 2019, 09:00

Раньше даты и имена выводились в одной таблице, но появилась необходимость вывести денные отдельно для каждой даты.

Есть функция:

  public function getSheduleForWeek() {
    $sql = "SELECT c.name, cs.date FROM " . DB_PREFIX . "courses c LEFT JOIN " . DB_PREFIX . "course_shedule cs ON (c.course_id = cs.course) WHERE cs.location = '1' AND YEARWEEK(`date`, 1) = YEARWEEK(CURDATE(), 1) ORDER BY cs.date";
    $query = $this->db->query($sql);
    return $query->rows;
  }

которая возвращает массив:

array(9) {
  [0]=>
  array(3) {
    ["name"]=>
    string(124) "Имя"
    ["date"]=>
    string(19) "2019-02-18 09:00:00"
  }
  [1]=>
  array(3) {
    ["name"]=>
    string(102) "Имя 2"
    ["date"]=>
    string(19) "2019-02-18 09:00:00"
  }
  [3]=>
  array(3) {
    ["name"]=>
    string(108) "Имя 3"
    ["date"]=>
    string(19) "2019-02-19 09:00:00"
  }
}

Сделал 2-ю функцию:

  public function getSheduleForDate() {
    $data = array();
    $sql = "SELECT distinct DATE_FORMAT(cs.date, '%Y-%m-%d') FROM " . DB_PREFIX . "courses c LEFT JOIN " . DB_PREFIX . "course_shedule cs ON (c.course_id = cs.course) WHERE cs.location = '1' AND YEARWEEK(`date`, 1) = YEARWEEK(CURDATE(), 1) ORDER BY cs.date";
    $query = $this->db->query($sql);
    foreach ($query->rows as $values) {
      foreach ($values as $value) {
        $data[] = $value;
      }
    }
    return $data;
  }

которая возвращает массив с датами:

array(4) {
  [0]=>
  string(10) "2019-02-18"
  [1]=>
  string(10) "2019-02-19"
  [2]=>
  string(10) "2019-02-20"
  [3]=>
  string(10) "2019-02-22"
}

Но нужно сделать что-бы был такой массив:

array(3) {
  ["date"]=>
  string(17) "2019-02-18"
  ["array_name"]=>
  array(9) {
      [0]=>
      array(3) {
        ["name"]=>
        string(124) "Имя"
        ["date"]=>
        string(19) "2019-02-18 09:00:00"
      }
      [1]=>
      array(3) {
        ["name"]=>
        string(102) "Имя 2"
        ["date"]=>
        string(19) "2019-02-18 09:00:00"
      }
  }
}
array(3) {
  ["date"]=>
  string(17) "2019-02-19"
  ["array_name"]=>
  array(9) {
      [0]=>
      array(3) {
        ["name"]=>
        string(108) "Имя 3"
        ["date"]=>
        string(19) "2019-02-19 09:00:00"
      }
  }
}

Подскажите, пожалуйста, как можно это сделать?

CMS: Opencart

Answer 1

Кому интересно, сделал так:

  public function getSheduleForWeek() {
    $sql = "SELECT c.name, DATE_FORMAT(cs.date, '%Y-%m-%d') date FROM " . DB_PREFIX . "courses c LEFT JOIN " . DB_PREFIX . "course_shedule cs ON (c.course_id = cs.course) WHERE cs.location = '1' AND YEARWEEK(`date`, 1) = YEARWEEK(CURDATE(), 1) ORDER BY cs.date";
    $query = $this->db->query($sql);
    $data = [];
    foreach ($query->rows as $row){
         $data[$row['date']][] = array(
            'name' => $row['name'],
        );
    }
    return $data;
  }

получил массив:

array(3) {
  ["2019-02-18"]=>
  array(2) {
    [0]=>
    array(3) {
      ["name"]=>
      string(124) "Имя"
    }
    [1]=>
    array(3) {
      ["name"]=>
      string(78) "Имя 2"
    }
  }
  ["2019-02-19"]=>
  array(2) {
    [0]=>
    array(3) {
      ["name"]=>
      string(108) "Имя 3"
    }
  }
}

и вывел дату через $key.

Answer 2

Выкинуть на помойку то, что лежит в $this->db. Вместо этого положить нормальный PDO. Затем

public function getSheduleForWeek()
{
    $dbp = DB_PREFIX;
    $sql = "SELECT date(cs.date), name, cs.date FROM {$dbp}courses c 
        LEFT JOIN {$dbp}course_shedule cs ON c.course_id = cs.course 
        WHERE cs.location = '1' AND YEARWEEK(`date`, 1) = YEARWEEK(NOW(), 1) 
        ORDER BY cs.date";
    return $this->db->query($sql)->fetchAll(PDO::FETCH_GROUP);
  }
READ ALSO
WebSocket, ReactPHP

WebSocket, ReactPHP

Изучаю вебсокеты, конкретно библиотеку reactphp, в документации масса примеров сокет-серверов, но подключение к сокету идёт в основном через...

112
Проблема с обработкой форм PHP

Проблема с обработкой форм PHP

Создал скрипт который должен реагировать на нажатие кнопки (с произвольным именем из 1 символа), однако при выполнении ничего не происходит...

99
Вывод контента с разных страниц на PHP [закрыт]

Вывод контента с разных страниц на PHP [закрыт]

Всем привет, имеется данный код на PHP, который парсит контент с одной страницыА как вывести например, контент с разных страниц

107