Задать вопрос
Ответы пользователя по тегу API
  • Как прочитать данные из двух таблиц одновременно?

    ValeriuCutebov
    @ValeriuCutebov
    Для того чтобы получить данные из двух таблиц, вам необходимо сделать JOIN запрос к базе данных, объединяя таблицу материалов с таблицей категорий. Пример такого запроса может выглядеть так:

    SELECT f.*, c.category_name 
    FROM freeroll f 
    JOIN category c ON f.category_id = c.id 
    ORDER BY f.id

    В этом запросе мы объединяем таблицы freeroll и category, используя условие ON f.category_id = c.id, и выбираем все столбцы из таблицы freeroll (*) и столбец category_name из таблицы category. Этот запрос вернет результат, который содержит данные из обеих таблиц, а также связанные данные из таблицы category для каждого материала.

    Чтобы реализовать этот запрос в методе read() вашей модели Freeroll, вам необходимо изменить запрос в методе read() на:
    $query = "SELECT f.*, c.category_name 
              FROM " . $this->table_name . " f 
              JOIN category c ON f.category_id = c.id 
              ORDER BY f.id";

    Затем, в цикле while, вы можете добавить значение category_name к массиву $freeroll_item:
    $freeroll_item = array(
        "id" => $id,
        "name_turnament" => $name_turnament,
        "prize" => $prize,
        "password" => $password,
        "data" => $data,
        "time" => $time,
        "category_id" => $category_id,
        "category_name" => $category_name,
        "buyin" => $buyin,
        "buyin_symbol" => html_entity_decode($buyin_symbol),
        "prize_symbol" => html_entity_decode($prize_symbol)
    );

    Здесь мы добавляем значение category_name к массиву $freeroll_item, которое мы получили из таблицы category с помощью JOIN запроса.

    Далее, в методе read.php вы можете вызвать метод read() вашей модели Category, чтобы получить все записи из таблицы категорий, и сохранить результаты в массив $category_arr. Это можно сделать следующим образом:
    $category = new Category($db);
    $category_stmt = $category->read();
    $category_num = $category_stmt->rowCount();
    
    $category_arr = array();
    while ($category_row = $category_stmt->fetch(PDO::FETCH_ASSOC)) {
        extract($category_row);
        $category_item = array(
            "id" => $id,
            "category_name" => $category_name
        );
        array_push($category_arr, $category_item);
    }

    Затем, внутри цикла while для каждого материала в $freeroll_arr, вы можете перебрать массив $category_arr, чтобы найти категорию с нужным id, и добавить ее значение к массиву $freeroll_item:
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        extract($row);
    
        $freeroll_item = array(
            "id" => $id,
            "name_turnament" => $name_turnament,
            "prize" => $prize,
            "password" => $password,
            "data" => $data,
            "time" => $time,
            "category_id" => $category_id,
            "buyin" => $buyin,
            "buyin_symbol" => html_entity_decode($buyin_symbol),
            "prize_symbol" => html_entity_decode($prize_symbol)
    );
    
    // Поиск категории с нужным id в массиве $category_arr
    foreach ($category_arr as $category_item) {
        if ($category_item['id'] == $category_id) {
            $freeroll_item['category_name'] = $category_item['category_name'];
            break;
        }
    }
    
    array_push($freeroll_arr["freeroll"], $freeroll_item);
    }

    Здесь мы ищем категорию с нужным id в массиве $category_arr, и если находим, добавляем значение category_name к массиву $freeroll_item.

    Теперь ваш метод read() будет возвращать все записи из таблицы freeroll, включая название категории для каждого материала.
    Ответ написан
    1 комментарий