Информация о цикле PHP в цикле из mysql

Я создаю страницу, на которой отображаются подробные сведения об игроке и информация о них хорошо просматривается. У меня также есть объединяющая таблица, которая извлекает отдельные записи из другой таблицы для штрафа по национальности, поэтому объединение не является проблемой.

Но теперь полностью зациклился на том, как перебирать данные, которые уже зацикливаются.

В моем классе player.php у меня есть функция, которая извлекает всю необходимую мне информацию и может нормально отображаться во внешнем интерфейсе.

function getById($id)
{
    $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
    $sql = "SELECT *, nationalities.nationality FROM players 
            LEFT JOIN nationalities ON players.nationality = nationalities.id 
            WHERE players.id = :id";

    $st = $conn->prepare($sql);
    $st->bindValue(":id", $id, PDO::PARAM_INT);
    $st->execute();

    $row = $st->fetch();
    $conn = null;

    if ($row) return new Players($row);
}

function getList($numRows = 1000000, $order = "lastname DESC")
{
    $conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
    $sql = "SELECT SQL_CALC_FOUND_ROWS *, lastname AS lastname FROM players
            ORDER BY " . ($order) . " LIMIT :numRows";

    $st = $conn->prepare( $sql );
    $st->bindValue( ":numRows", $numRows, PDO::PARAM_INT );
    $st->execute();

    $list = array();

    while ($row = $st->fetch())
    {
        $player = new Players($row);
        $list[] = $player;
    }

    //Now get the total number of players that matched the criteria
    $sql = "SELECT FOUND_ROWS() AS totalRows";

    $totalRows = $conn->query($sql)->fetch();
    $conn = null;

    return (array("results" => $list, "totalRows" => $totalRows[0]));
}

Моя проблема в том, что у игрока может быть несколько позиций, а не только одно отображение? Как мне этого добиться. Я пробовал выполнять цикл после этого с помощью SQL, но он, похоже, не работает, как я к нему подхожу. Мои таблицы:

**players**
id, firstname, lastname ...



**positions**
id, position

**player_positions**
player_id, position_id 

Запросы, подобные этому, с набором данных ниже:

SELECT positions.position, players.firstname, players.lastname
FROM positions 
LEFT JOIN player_positions ON positions.id = player_positions.position_id
LEFT JOIN players ON player_positions.players_id = players.id
WHERE players_id = :id

.

position, firstname, lastname
RWB, Lewis, Robinson
CB, Lewis, Robinson

Мой первый цикл проходит через игроков и получает данные нормально, но теперь мне нужно, чтобы он циклически повторял этот цикл данных по этому набору данных и сохранял его как позиции, а затем мог отображать его во внешнем интерфейсе :(

Любая помощь или указатели по этому поводу были бы замечательными.

Я не понимаю, где именно у вас возникла проблема. У вас возникли проблемы при попытке выполнить последний запрос из цикла?

Andrii Maletskyi 14.06.2018 14:13

Вы собираетесь сгруппировать или упорядочить результаты в $list по плеерам?

Adder 14.06.2018 14:31

Итак, я пропущу начальный запрос и извлечу всех игроков и их информацию, но у игрока может быть более одной позиции ... т.е. Льюис Робинсон может быть связан с CB, RB и LB - имеет ли это смысл? и спасибо, что вернулись в любом случае, ха-ха

Mike Dunkling 14.06.2018 14:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
62
1

Ответы 1

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

function getList($numRows = 1000000, $order = "lastname DESC")
{
    $conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
    $sql = "SELECT SQL_CALC_FOUND_ROWS *, lastname AS lastname, id AS id FROM players
            ORDER BY " . ($order) . " LIMIT :numRows";

    $st = $conn->prepare( $sql );
    $st->bindValue( ":numRows", $numRows, PDO::PARAM_INT );
    $st->execute();

    $list = array();

    while ($row = $st->fetch())
    {
        $id = $row[2];
        $player = new Players($row);
        if (!isset($list[$id])) list[$id] = array(); 
        $list[$id][] = $player;
    }

    //Now get the total number of players that matched the criteria
    $sql = "SELECT FOUND_ROWS() AS totalRows";

    $totalRows = $conn->query($sql)->fetch();
    $conn = null;

    return (array("results" => $list, "totalRows" => $totalRows[0]));
}

//Used like this (just an example for the loops):

$list = getList();

foreach($list as $id => $positions) {
    echo $positions[0]->playerName."<br>";
    foreach($positions as $player) {
        //Output
        echo print_r($player, true)."<br>";
    }
}

хорошо, так что, насколько я понимаю, это тоже не сработает .... простите меня, если я просто интерпретирую это неправильно ... но я использовал <? php echo $ player-> id?>, чтобы вытащить информацию о player ... что казалось логичным, поскольку я использую эти данные. приведенное выше, похоже, меняет это на $ id, поэтому игрок теперь просто $ id, который, как я полагаю, правильный. но затем $ позиции по мере того, как $ player меняет, я дам ему вихрь с $ позициями в качестве объявления $ position, посмотрите, будет ли это работать - это еще один способ попробовать, поэтому я благодарю

Mike Dunkling 14.06.2018 15:41

Другие вопросы по теме