php перечисление данных mysql в таблице html в столбцах и строках

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

База данных

Таблица игроков:

playerid name lastname 

таблица оценки:

 scoreid score playerid (foreign key with player.playerid) 

Моя оценка содержит:

 scoreid: 1, score: 53, playerid: 1 scoreid: 2, score: 23, playerid: 1 scoreid: 3, score: 12, playerid: 2 scoreid: 4, score: 67, playerid: 3 scoreid: 5, score: 31, playerid: 2 

PHP: Это то, что я сейчас работаю, но оно отображает только имя.

 $result = mysqli_query($conn,"SELECT * FROM player"); echo "<table> <tr> <th>Name</th> <th>Last Name</th> </tr>"; while($row = mysqli_fetch_array($result)) { echo "<tr>"; echo "<td>" . $row['name'] . "</td>"; echo "<td>" . $row['lastname'] . "</td>"; echo "</tr>"; } echo "</table>"; 

Требуемый результат

 | Jonny | Mike | Bill | | 23 | 10 | 12 | | 12 | 31 | 23 | 

..и т.д

Как вы можете видеть, имена игроков – это столбцы, а баллы – это данные в строках, соответствующих игроку.

Подумайте об этом как:

Таблица игроков:

 id: 1. name: Jonny id: 2. name: Mike id: 3. name: Bill 

таблица оценки:

 scoreid: 1, score: 23, playerid: 1 (Jonny) scoreid: 2, score: 12, playerid: 1 (Jonny) scoreid: 3, score: 10, playerid: 2 (Mike) scoreid: 4, score: 31, playerid: 2 (Mike) scoreid: 5, score: 12, playerid: 3 (Bill) scoreid: 6, score: 23, playerid: 3 (Bill) 

Надеюсь, теперь вы получите лучшее понимание

Вывод

Вот как это выглядело раньше

введите описание изображения здесь

Вот как выглядит результат:

введите описание изображения здесь

Лучший способ сделать таблицу, отображающую «строки-данные в столбцах», – это использовать таблицу в таблице, поскольку вам нужно построить таблицу в HTML по строкам.

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

 $result = mysqli_query($conn,"SELECT p.*, (SELECT GROUP_CONCAT(s.score) FROM score s WHERE s.playerid = p.playerid) AS scorearray FROM player p"); 

Теперь ваш результат будет содержать все столбцы вашей таблицы игроков и столбец «scorearray», который содержит список всех баллов, полученных от вашего плеера. См. Пример GROUP_CONCAT .

Чтобы сгенерировать первую строку, вы можете повторно использовать данный код:

 $result = mysqli_query($conn, "SELECT p.*, (SELECT GROUP_CONCAT(s.score) FROM score s WHERE s.playerid = p.playerid) AS scorearray FROM player p"); $playercols = array(); $scores = array(); while($row = mysqli_fetch_array($result)) { $playercols[] = "<th>" . $row['name'] . "</th>"; $currentscore = explode(",", $row['scorearray']); // Only doing a line break, you can build a one-columned table out of this data aswell $scores[] = "<td valign=top>" . implode("<br />", $currentscore) . "</td>"; } echo "<table>"; echo "<tr>"; echo implode("", $playercols); echo "</tr>"; echo "<tr>"; echo implode("", $scores); echo "</tr>"; echo "</table>"; 

См. Результат здесь: Результат

И полный источник здесь: Источник

Вы должны использовать JOIN , в соответствии с:

 $result = mysqli_query($conn,"SELECT player.*, score.* FROM player LEFT JOIN score ON score.playerid = player.playerid "); echo "<table> <tr> <th>Name</th> <th>Last Name</th> <th>Score</th> </tr>"; while($row = mysqli_fetch_array($result)) { echo "<tr>"; echo "<td>" . $row['name'] . "</td>"; echo "<td>" . $row['lastname'] . "</td>"; echo "<td>" . $row['score'] . "</td>"; echo "</tr>"; } echo "</table>";