Получить строки, в которых один столбец является уникальным, а другой столбец - наименьшим значением относительно уникального столбца. - PullRequest
1 голос
/ 09 марта 2020

Я борюсь с относительно простой проблемой, но просто не могу обойти ее.

У меня есть метод getNextRound(), который возвращает массив чисел. Числа представляют номера недель в таблице базы данных.

Затем у меня есть второй метод getUpcomingGames(), где я вызываю первый метод, затем я хочу использовать числа из первого метода для использования в моем запросе.

Вот пример: МЕТОД 1

public function getNextRound(){

        $sql = "SELECT min(weekNum) from schedule WHERE schedule.gameDateTime > NOW() GROUP BY tournament ORDER BY gameDateTime ASC";
        $stmnt = $this->db->query($sql);
        if ($stmnt->num_rows() > 0) {
            print_r($stmnt->result());
            return $stmnt->result();
        }
        return false;
    }

РЕЗУЛЬТАТ ИЗ ВЫШЕГО МЕТОДА / ЗАПРОСА

array (size=3)
  0 => 
    object(stdClass)[24]
      public 'min(weekNum)' => string '38' (length=2)
  1 => 
    object(stdClass)[25]
      public 'min(weekNum)' => string '14' (length=2)
  2 => 
    object(stdClass)[26]
      public 'min(weekNum)' => string '7' (length=1)

I Теперь хочу использовать данные в массиве, чтобы получить всю информацию, содержащуюся в таблице расписания, связанную с номером недели.

Моя проблема здесь

МЕТОД 2

public function getUpcomingGames()
    {
//HERE I WANT TO GET ALL INFO FROM SCHEDULE WHERE ROUND = $week
        $rounds[] = $this->getNextRound();
        foreach ($rounds as $round) {
            $sql = "SELECT *  from  schedule WHERE weekNum = '$round' ORDER BY gameDateTime ASC ";
            $data[] = $this->db->query($sql);
            var_dump($data);
        }

ОШИБКА: среди прочих я получаю ошибку преобразования массива в строку.

Я просмотрел документы codeigniter, но не смог найти нужный мне метод.

DB TABLE qu

ВОПРОС:

  • Есть ли в CI метод запроса, в который можно вставить массив в запрос и l oop over array (), если это имеет смысл?

  • Как я могу улучшить / исправить вышеуказанный запрос? * 10 47 *

1 Ответ

1 голос
/ 10 марта 2020

Полагаю, вам нужен запрос, подобный следующему:

SELECT *
FROM schedule AS parent
JOIN (
    SELECT tournament,
           MIN(weekNum) AS nextWeek
    FROM schedule AS child
    WHERE gameDateTime > NOW()
    GROUP BY tournament
) ON parent.tournament = child.tournament AND parent.weekNum = child.nextWeek
ORDER BY gameDateTime";

Это сохранит связь между турнирами и weekNums при передаче соответствующих строк в родительский запрос. Таким образом, набор результатов остается верным, даже если у вас есть неквалификационный турнир с квалификационным значением WeekNum.

Эквивалент кодового символа:

$this->db->select('tournament, MIN(weekNum) AS nextWeek');
$this->db->from('schedule');
$this->db->where('gameDateTime >', 'NOW()', false);
$this->db->group_by('tournament');
$subquery = $this->db->get_compiled_select();


// $this->db->select('*'); <- not necessary
$this->db->from('schedule AS parent');
$this->db->join('(' . $subquery . ') AS child', 'parent.tournament = child.tournament AND parent.weekNum = child.nextWeek');
$this->db->order_by('gameDateTime');
return $this->db->get()->result();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...