PHP在mysql循环中循环信息

标签 php mysql loops

我正在创建一个页面,显示玩家详细信息并让信息顺利通过。我还有一个连接表,可以从另一个表中提取单个记录以获取国籍,因此连接不是问题。

但现在完全陷入了如何循环已经循环的数据的困境。

在我的players.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]));
}

我的挑战是一个玩家可以有多个位置,而不仅仅是 1 个显示?我如何实现这一点我在使用 SQL 循环时尝试过,但它似乎不起作用无论我以何种方式处理它。我的 table 是:

**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

我的第一个循环是遍历玩家并检索数据,但现在我需要它在该数据集上的数据循环中循环并将其存储为位置,然后能够在前端显示它:(

任何关于做这样的事情的帮助或指示都会很棒

最佳答案

我会按玩家对位置进行分组,然后使用双循环来显示玩家位置。

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在mysql循环中循环信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50856925/

相关文章:

php - 有趣的正则表达式

c++ - 如何有效地用另一个 std::string 的迭代值替换 std::string 中的字符?

php - ColdFusion/PHP 兼容性

mysql查询以获取每个给定键的记录

mysql 'IN' 子句问题

mysql - 聊天信使 mysql 优化

loops - 如何使用两个迭代器进行迭代

c++ - C++ VS2010 中的 "for each"循环编译错误

php - 使用 CI_Session 判断用户是否在线

phpquery codeigniter 方法