【问题标题】:How to display the records from the first table and match the records from the second table?如何显示第一个表中的记录并匹配第二个表中的记录?
【发布时间】:2019-06-26 18:44:11
【问题描述】:

我有两张表,一张用于学生详细信息,第二张用于 stud_marks。

我在学生表中插入个人信息

  s_id  | name   | mobile     | email  
    1   | asdff  |1234567831  |asd@gmail.com
    2   | kjhgg  |1231231231  |mnhg@gmail.com
    <!--many more-->

我正在插入学生标记,例如

m_id    |sub_name    |mark       | stu_id    |date_of_added
1       |asdasd      |30         | 1       |2019-06-16 17:31:07
2       |oiuytr      |40         | 1       |2019-06-16 17:31:07
3       |okjhyt      |50         | 2       |2019-06-20 20:12:09
4       |ppoiuj      |60         | 1       |2019-06-22 11:41:34
<!--many more--> 

现在,我必须使用什么查询并显示单个记录。就像我必须显示学生 1 记录一样。所以我的预期输出是

 s_id  | name   | mobile     | email  
   1   | asdff  |1234567831  |asd@gmail.com


m_id    |sub_name    |mark       | stu_id    |date_of_added
1       |asdasd      |30         | 1       |2019-06-16 17:31:07
2       |oiuytr      |40         | 1       |2019-06-16 17:31:07
4       |ppoiuj      |60         | 1       |2019-06-22 11:41:34

我在编辑页面上,我必须在那里显示类似的记录

name:-asdff
mobile:-1234567831
Email:-asd@gmail.com

<!--subject details-->
Sub_name Mark
asdasd   30         
oiuytr   40
ppoiuj   60      

我可以在 HTML 页面上显示记录。显示个人信息。我可以使用 for each 来显示主题详细信息。

我正在使用 CodeIgniter。

我尝试了以下查询,但得到 3 条记录。

SELECT * FROM `student` LEFT JOIN stud_marks ON student.s_id=stud_marks.stu_id WHERE student.s_id=1

查询的输出是

1 asdff 1234567831 asd@gmail.com 1 asdasd 30 1 2019-06-16 17:31:07

1 asdff 1234567831 asd@gmail.com 2 asdasd 40 1 2019-06-16 17:31:07

1 asdff 1234567831 asd@gmail.com 4 asdasd 60 1 2019-06-22 11:41:34

你能帮我解决这个问题吗?

【问题讨论】:

  • 那么问题出在哪里?您正在为 s_id=1 使用 WHERE 子句,因此该 s_id 有 3 条记录,而您作为查询结果获得的记录。你的预期输出是什么?我们可以相应地修改查询。
  • @RajeshKakkad,感谢您的回复。我已经在问题中添加了我的预期输出。请检查代码的第三部分。
  • 您提到的代码按预期返回输出。您是否需要在示例中提到的显示记录方面的帮助,或者您对查询返回的数据有任何问题?
  • 我必须对查询提出问题,因为如果您检查我得到 3 条正确的记录,因为我曾经加入,并且我有 3 条与学生标记中的 id 1 相关的记录。现在我如何在编辑页面上显示,因为学生个人详细信息是唯一的,但学生标记不止一个。

标签: php mysql codeigniter-3


【解决方案1】:

试试这个:

//assuming your database connection will be in $con
$sql="SELECT * FROM `student` LEFT JOIN stud_marks ON   student.s_id=stud_marks.stu_id WHERE student.s_id=1";
 $result=mysqli_query($con,$sql);
 while($row = $result->fetch_assoc()){
 $name=$row['name'];
 $mobile=$row['mobile'];
 $email=$row['email'];
 $marks[]=$row['mark'];
 $sub_names[]=$row['sub_name'];
 }
 $records=count($sub_names);
 echo 'Name :'.$name; echo '<br>';
 echo 'Mobile :'.$mobile; echo '<br>';
 echo 'Email :'.$email; echo '<br>';
 echo '------'; echo '<br>';
 echo 'Subject    Marks'; echo '<br>';
 for ($x = 0; $x <= $records; $x++) {
 echo "$sub_names[$x]  $marks[$x]   <br>";
 }
 echo '------'; echo '<br>';

提取数据的CodeIgniter示例:

$query = $this->db->query("YOUR QUERY");

foreach ($query->result_array() as $row)
{
        $name=$row['name'];
        $mobile=$row['mobile'];
        $email=$row['email'];
        $marks[]=$row['marks'];
        $sub_names[]=$row['sub_names'];
}

为了显示结果,在我之前的示例中,从 $records=count($sub_names) 开始的代码没有变化。

【讨论】:

  • @questionbank 刚刚在我的服务器上测试工作正常。
  • 我正在使用 CodeIgniter。
  • 我没有使用 CodeIgniter,但在访问数据方面只有微小的变化,如此处 codeigniter.com/user_guide/database/results.html 中所述,并在此处接受了答案 stackoverflow.com/questions/15246878/… - 具体参见 result_array() 在提到的 codeigniter 页面上。在我的示例中,不要使用 while 循环,而是遵循他们的 foreach 循环。
  • @questionbank - 检查我在答案中添加的 codeigniter 的方法。此外,请参阅我上面提到的页面。这应该会让你走上正轨。
猜你喜欢
  • 2021-11-26
  • 1970-01-01
  • 2014-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多