如何从多个SQL表中获取值并在html/php表中显示?
我有一个名为如何从多个SQL表中获取值并在html/php表中显示?,php,html,mysql,forms,html-table,Php,Html,Mysql,Forms,Html Table,我有一个名为result的SQL数据库,其中包含表res和sub。 例如 res表格列和内容如下: sno regno name sub1 sub2 sub3 sub4 sub5 1 1DU12CS100 student1 70 80 85 70 90 2 1DU12CS101 student2 75 70 90 80 70 3 1DU12EE015 student3
result
的SQL数据库,其中包含表res
和sub
。
例如
res
表格列和内容如下:
sno regno name sub1 sub2 sub3 sub4 sub5
1 1DU12CS100 student1 70 80 85 70 90
2 1DU12CS101 student2 75 70 90 80 70
3 1DU12EE015 student3 80 85 70 50 65
4 1DU14CS123 student4 88 85 85 90 70
5 1DU13ME050 student5 85 90 70 60 55
子
表格列和内容如下:
Sno batname sub1 sub2 sub3 sub4 sub5
1 1DU12CS Maths English Hindi Urdu Social
2 1DU12ME Sanksrit Chinese Japanese French Dutch
3 1DU12EE Circuit Electrical Electronic Maths Hindi
4 1DU14CS Hindi Maths Urdu Science Maths
5 1DU13ME Computer Maths Electrical Mechanical GK
我想从表res
中获取一些值,从表sub
中获取一些值,并显示在php/html表中
1DU12CS100 --
1DU ->college code
12 ->Student admission year
CS ->computer science
100->roll no of student
当有人以php形式输入1DU12CS100时,结果应该如下所示
Subjects Marks
Maths 70
English 80
Hindi 85
Urdu 70
Social 90
当有人输入1DU13ME050时,显示屏应为
Subjects Marks
Computer 85
Maths 90
Electrical 70
Mechanical 60
GK 55
php表单代码是
<!DOCTYPE HTML>
<html>
<body>
<form action="result.php" method="post">
Enter your Reg No: <input type="text" name="regno"><br>
<input type="submit">
</form>
</body>
</html>
输入您的注册号:
result.php代码是//此php代码中应该做哪些更改
<?php
$servername = "localhost";
$username = "myresult";
$password = "abcdefg";
$dbname = "myresult";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$regno = mysqli_real_escape_string($conn, $_POST['regno']);
$sql = "SELECT * FROM myresult WHERE regno LIKE '$regno'"; // What changes should be here ??
$result = $conn->query($sql);
$columns = array();
$resultset = array();
while ($row = mysql_fetch_assoc($result)) {
if (empty($columns)) {
$columns = array_keys($row);
}
$resultset[] = $row;
}
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "{$row['sub1']}{$row['sub2']}"; // What changes should be made here??
// Print the data
while($row = mysql_fetch_row($result)) {
foreach($row as $_column) {
echo "{$_column}";
}
}
}
} else {
echo "Result Not Found";
}
$conn->close();
?>
(我没有列出所有的列。由于列的名称相同,因此必须指定别名。更改名称将是一个好主意-subn不是一个好名称。)
然后在下面
while ($row = $result->fetch_assoc()) {
echo "{$row['ressub1']}{$row['subsub1']}";
我只是觉得sql查询中的内部连接应该可以做到这一点。有些人认为:
SELECT * FROM res r INNER JOIN sub s ON r.id = s.id WHERE regno LIKE '1DU12CS100';
这看起来只是一个开始(这里有太多的事情要做),但对于初学者来说,您可以在开始时将SQL查询修改为类似这样的内容,因为batname似乎作为所有regno变量的开始而存在
$sql = "SELECT regno as batname FROM myresult WHERE regno LIKE '{$regno}%'";
然后您可以将其转换为一个变量,例如$batname=$row['batname']
然后可以使用$batname
作为链接表之间数据的方法。但是,您需要做更多的工作,因为存在一些确切的字符串,这些字符串意味着什么。因此,您需要在$batname
中的某些位置识别特定字符串以识别其含义。这将不得不自行分解。最好创建一个新的表来标识主题名称,以匹配由此创建的字符串
换句话说,您的脚本实际上只是一个开始。一旦有了识别字符串中每个元素的方法(同样,查找表会让您的生活变得更轻松),您就可以开始编写php脚本了
下面是一个可以使用的查找表示例
code name
--- ----
CS Computer Science
等等(我很难说出这些代码是怎么回事,但我想你知道它们都是什么意思)。您可能应该为每个有意义的片段提取这些数据。通常不赞成使用id的子字符串。而是分别存储batname id和学生id。在很多方面都很容易。正如彼得·鲍尔斯刚才所说的。您可以获取子字符串,但必须绝对确定它们是唯一存在的地方。我强烈建议扩展数据库并使用它,而不是依赖您的regno
字段;除非你被迫这样做(这看起来像是旧穿孔卡片式数据管理的残余),否则我会重组你的数据。“规范化”是你应该在谷歌上研究的术语&找到一些文章或教程。很好地重构数据库将在未来带来巨大的收益。。。等待的时间越长,事情就越难……谢谢大家的帮助。我对PHP和SQL非常陌生。我所做的就是在谷歌上搜索并从一些网站上学习。。。我想要的是,您可以从这里看到并通过输入1DS13CS001、1NH13CS052、1OX13CS001等进行检查。。1是班加罗尔地区的代码,接下来的2个字母是学院代码,接下来的2个字母是入学年份,接下来的2个字母是分校/课程代码,接下来的3个字母是注册号。。。你可以在这里查大学代码。。。我不知道最好的方法来安排数据库,并从中获取结果。。。在此方面的任何帮助都将不胜感激!你不明白我的问题。。。SNo仅用于删除或编辑行。。。我尝试了你的代码,但它不起作用…我想要的是,当有人输入1DU12CS100时,然后从batname为1DU12CS的子表中获取主题,并从regno为1DU12CS100的res表中获取结果…感谢你的帮助和指导,在这方面应该做些什么。。。但我对这个很陌生,所以我不能自己做,或者我不知道如何在数据库中实现它。。。我现在的主要目标是,当有人输入1DU12CS100时,将从batname为1DU12CS的子表中获取主题,并从regno为1DU12CS100的res表中获取结果,结果应以php形式显示。。。请帮助我编写代码…我真正想要的是您完全理解的,我确信您的代码一定会满足我的需要,但出现的一个问题是…我从phpmyadmin SQL box得到的错误是#1305-函数akfashio_result.substr不存在。甚至从result.php页面我也得到了。。。结果未找到将您在phpmyadmin中尝试的精确查询复制/粘贴到此处的注释中。很抱歉,出现了一些错误。。。早些时候我执行了subm.batname=submstr(res.regno,0,7),因为我的表名是subm,所以我认为它应该是submstr,但后来我知道substr是一个内置函数…我创建了一个单独的表sub和res…现在我执行了。。。从sub.batname=substr(res.regno,0,7)上的res JOIN sub中选择sub.batname,sub.sub1作为subsubsub1,res.sub1作为ressub1,其中regno类似于'1DU12CS100';但结果是MySQL返回一个空结果集(即零行)。(询问花了0.0010秒)是的,我得到了。。。。sub.batname=substr(res.regno,1,7)。。。它应该是1,7而不是0,7。。。我不知道substr这个词,所以我在想我该怎么做。。。但当我知道这是一个函数时,我在谷歌上搜索并找到了,然后我更改了代码。。。。现在它正在工作。。。
code name
--- ----
CS Computer Science