Я создаю страницу, на которой отображаются подробные сведения об игроке и информация о них хорошо просматривается. У меня также есть объединяющая таблица, которая извлекает отдельные записи из другой таблицы для штрафа по национальности, поэтому объединение не является проблемой.
Но теперь полностью зациклился на том, как перебирать данные, которые уже зацикливаются.
В моем классе 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
Мой первый цикл проходит через игроков и получает данные нормально, но теперь мне нужно, чтобы он циклически повторял этот цикл данных по этому набору данных и сохранял его как позиции, а затем мог отображать его во внешнем интерфейсе :(
Любая помощь или указатели по этому поводу были бы замечательными.
Вы собираетесь сгруппировать или упорядочить результаты в $list по плеерам?
Итак, я пропущу начальный запрос и извлечу всех игроков и их информацию, но у игрока может быть более одной позиции ... т.е. Льюис Робинсон может быть связан с CB, RB и LB - имеет ли это смысл? и спасибо, что вернулись в любом случае, ха-ха






Я бы сгруппировал позиции по игрокам, а затем использовал бы двойной цикл для отображения позиций игроков.
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, посмотрите, будет ли это работать - это еще один способ попробовать, поэтому я благодарю
Я не понимаю, где именно у вас возникла проблема. У вас возникли проблемы при попытке выполнить последний запрос из цикла?