mysql - 如何将数据库中两个表中的连接条目显示为 HTML 表?

标签 mysql sql database database-design

希望你们一切都好。

我有 3 个数据库表:

'Events' table with event ID, name and location包含事件 ID、名称和位置的“事件”表。

'Students' Table with StudentID, First Name, Last name, House and Year/grade “学生”表,包含学生 ID、名字、姓氏、学院和年级。

an 'entries' table with StudentID, and two events that they choose to enroll in.一个包含 StudentID 的“entries”表,以及他们选择参加的两个事件。

如何创建允许我显示事件的 SQL 代码?例如,如果我想显示...

The year 7 girl's 100m run. 7 年级女生 100 米跑。

以类似这张表格的形式:

sample table with an empty space for people to manually write times in.带有空白空间的示例表,供人们手动写入时间。

我该怎么做,以便它接受来自组合框的输入并找到选择了此事件的学生(在 Ev1 或 Ev2 字段中)并将他们列出来,当信息分布在 3 个不同的表格中时?

这是我的代码,但我认为它不起作用。

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Sports Day Lineup Generator</title>
</head>

<body>

Hello! What page would you like to see?<br><br>

<form id="form2" name="form2" method="POST" action="display.php">
<select id="Year"><option value="7">Y7</option><option value="8">Y8</option><option value="9">Y9</option><option value="10">Y10</option><option value="11">Y11</option><option value="12">IB1</option><option value="13">IB2</option></select>

<select id="Gender"><option value="0">Girls</option><option value="1">Boys</option></select>

<select id="Event">
<option value="1">100m</option><option value="2 relay">100m Relay</option><option value="3">400m</option><option value="4">800m</option><option value="5">Indoor Sports</option><option value="6">High Jump</option><option value="7">Long Jump</option><option value="8">Triple Jump</option><option value="9">Shotput</option>
</select><br>
<input type="submit" value="generate">
</form>
OR <form id="form2" name="form2" method="POST" action="displayAll.php"><input type="submit" value="generate all tables"></form>
</body>
</html>

这是 adminPage.php,这是:

<?php 

//This gets all the other information from the form 
$id=$_POST['studID']; 
$event1=$_POST['event1']; 
$event2=$_POST['event2']; 

// Connects to your Database 
// require_once 'login.php';
$db_hostname = 'localhost';
$db_username = 'root';
$db_password = 'ITGS!!!';
$db_server=mysql_connect($db_hostname,$db_username,$db_password);

if(!$db_server) die("Unable to connect to MySQL" .mysql_error());

$db_database='sportsDay';

mysql_select_db($db_database,$db_server)
or die("Unable to connect to database. " .mysql_error()); 

$sql = "SELECT Entries.stID, Students.fName, Students.lName, Students.gender, Events.eventID

来自事件 INNER JOIN 客户 ON Students.stID=Entries.stID; "; $result = $db_server->query($sql);

if ($result->num_rows > 0) {
    echo "<table><tr><th>Name</th><th>House</th></tr>";
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "<tr><td>".$row["fName"]." ".$row["lName"]."</td><td>".$row["house"]."</td></tr>";
    }
    echo "</table>";
} else {
    echo "0 results";
}
$conn->close();

     ?> 

     <html>

     <body>
     </body>
     </html>

是我的 display.php。

最佳答案

Hanalei,我不知道你的问题到底想要什么,但我假设你需要根据下拉列表值显示表格。所以第一步是将这个值写入 PHP 文件。

你有这个 SQL 查询:

$sql = "SELECT Entries.stID, 
Students.fName, Students.lName, Students.gender, 
Events.eventID
FROM Events INNER JOIN Customers ON Students.stID=Entries.stID; "; 
$result = $db_server->query($sql);

它应该像下面这样,我没有看到名为 customers 的表,我猜你指的是 students。在 SQL 选择查询中还有一个额外的 ;:

$sql = "SELECT Entries.stID, 
Students.fName, Students.lName, Students.gender, 
Events.eventID
FROM Events INNER JOIN Students ON Students.stID=Entries.stID"; 
$result = $db_server->query($sql);

现在,在您的 HTML 表单中您有一些错误,其中每个下拉列表都有一个 ID,但服务器采用名称标签值,因此而不是这一行:

<select id="Year">
<option value="7">Y7</option>
<option value="8">Y8</option>
<option value="9">Y9</option>
<option value="10">Y10</option>
<option value="11">Y11</option>
<option value="12">IB1</option>
<option value="13">IB2</option>
</select>

应该是这样的:

<select id="Year" name="Year">
<option value="7">Y7</option>
<option value="8">Y8</option>
<option value="9">Y9</option>
<option value="10">Y10</option>
<option value="11">Y11</option>
<option value="12">IB1</option>
<option value="13">IB2</option>
</select>

我添加了 name="Year",现在 $_POST['Year'] 将采用正确的值。

为每个下拉列表添加一个 name 标签,您就可以将它们发送到您的 PHP 文件 display.php 中:

$year = $_POST['Year'];
$gender = $_POST['Gender'];
$event = $_POST['Event'];

$sql = "SELECT Entries.stID, 
Students.fName, Students.lName, Students.gender, 
Events.eventID
FROM Events INNER JOIN Students ON Students.stID=Entries.stID
WHERE Students.year = '.$year.' AND Student.gender = '.$gender.'"; 
$result = $db_server->query($sql);

您的第一个表没有通过外键连接到第二个表,因此我们无法进行 JOIN 以获取所有具有特定年份和性别的人应该去哪里参加他们的事件。

并且您应该考虑开始学习 mysqli_PHP-PDO 以获得更安全的数据。

希望我能理解您的要求,如果这对您没有帮助,您可以通过电子邮件寻求更多帮助。

关于mysql - 如何将数据库中两个表中的连接条目显示为 HTML 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36448024/

相关文章:

php - 使用 Laravel 5.3 从 MySql 数据库中搜索记录

PHP SQL 包装器

database - 管理 H2 数据库的前端工具

php - 结果从数据库中可用的确切行返回减去 1(负 1)的值

mysql - SQL查询以获取100名学生中排名在10到20之间的学生姓名?

mysql - ORDER BY 列从连接表表现

php - MySQL枚举删除反斜杠

php - 使用一个 SQL 查询的数据来获得另一个 SQL 查询的结果

sql - mysql查询错误,不等于

Android,运行时查看SQLite数据库(不像其他题)