У меня есть две таблицы в моей базе данных, таблице игроков и счетах. У меня есть данные в этой таблице и вы хотите перечислить данные из таблицы баллов в таблицу 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>";