【问题标题】:How could I avoid using a MySQL query in a While loop in PHP如何避免在 PHP 的 While 循环中使用 MySQL 查询
【发布时间】:2012-06-10 16:12:34
【问题描述】:

我有一个输出类列表的 while 循环。在类数据库中,教师姓名由用户数据库中的教师 ID 确定。

这是我的数据库结构。

Classes Database
-----------------------------
ID       CLASS              TEACHER
1        product design     3

User Database
-----------------------------
ID       NAME
3        John Doe

所以在列出我的课程时,我需要将“3”转换为“John Doe”。

这是我当前的代码:

<?php 
  $classdetails = mysql_query("SELECT * FROM class");
  while($class = mysql_fetch_array($classdetails)) {
    $marklist_class = $class['class'];
    $marklist_teacher = $class['teacher']; //This is a userid                                   

    //------Somewhere here i need to get the userid and look it up in the user database
    if($marklist_class=="") {

    } else {
      echo $marklist_class . ' ' . $marklist_teacher;}
    }
  }
?>

我知道在此处放置另一个 mysql 查询会降低性能并且不建议这样做,所以我将如何在不向 while 循环中添加查询的情况下查找每一行的用户数据库。

谢谢。

【问题讨论】:

  • 这听起来像您需要在初始查询中提取更多信息,除非它是分层数据;然后我会说在开始时进行 2 个查询,将它们放入数组中,并在循环中引用它们。

标签: php mysql database loops while-loop


【解决方案1】:

您可以使用联接查询一次获取您需要的所有信息。然后在您的应用程序中,您可以对其进行排序并相应地显示。 例如

SELECT Classes.class, Users.Name
FROM Classes JOIN Users on Classes.Teacher = Users.ID

【讨论】:

  • 谢谢你的工作,这可能与三个或更多的表表吗?
  • 您可以连接任意数量的表,只要它们以某种方式相互关联,只需在前一个之后添加一个新连接即可。不过,请确保按顺序提取它们 - 您输入的联接应与初始查询或先前联接中提取的信息联接。
  • 是的,我已经搞定了,花了一段时间才明白,谢谢大家的帮助。
【解决方案2】:

你想在 mysql 中使用JOIN

SELECT * FROM class c JOIN user u ON u.ID = c.TEACHER

【讨论】:

    【解决方案3】:

    您可以在初始查询中使用 JOIN。

    Select c.id, c.class, c.teacher, u.name from class c join user u on u.id = c.teacher
    

    这将在一个查询中返回 Class 中的所有列,以及 User 中匹配的教师姓名列。

    【讨论】:

      猜你喜欢
      • 2011-05-01
      • 1970-01-01
      • 2018-12-14
      • 2013-03-11
      • 2020-06-04
      • 2012-08-20
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多