繁体   English   中英

包含在while循环中

[英]Include within a while loop

我确信我无法解决这个问题,因为缺乏对php某些方面的了解,但我一直试图解决它一个月没有运气。 这是问题的简化版本。

在我的数据库中,我有一个成员表,一个子表(每个成员的孩子),以及一个朋友请求表(这包含了孩子们互相发送给朋友的请求)。

我正在尝试做的是使用以下while循环显示特定父级的子级....

$query = "SELECT * From children " . <br>
         "WHERE parent_member_id = $member_id";     <br>  
$result = mysql_query($query) <br>
      or die(mysql_error());<br>
$num_children = mysql_num_rows($result);<br>
echo $num_children;<br>
while($row = mysql_fetch_array($result)){<br>
   $first_name = $row['first_name'];<br>
   $child_id = $row['child_id'];<br>

<div>echo $first_name<br>

}

这个while循环完美地运行并显示这样的东西......

1)肯尼思
2)拉里

我试图做的是显示每个孩子旁边的朋友请求的数量......就像这样

肯尼斯(2)
拉里(5)

为此,我尝试对原来的while循环进行以下修改...

$query = "SELECT * From children " .<br>
         "WHERE parent_member_id = $member_id";<br>



$result = mysql_query($query) <br>
      or die(mysql_error());<br>
$num_movies = mysql_num_rows($result);<br>
echo $num_movies;<br>
while($row = mysql_fetch_array($result)){<br>

   $first_name = $row['first_name'];<br>
   $child_id = $row['child_id'];<br>

echo $first_name; include('counting_friend_requests.php') ;

}

在这个版本中,包含的脚本看起来像这样......

$query = "SELECT <br>children.age,children.child_id,children.functioning_level,children.gender,children.parent_member_id,children.photo, children.first_name,friend_requests.request_id " .
         "FROM children, friend_requests " .
         "WHERE children.child_id = friend_requests.friend_two " .
         "AND friend_requests.friend_one = $child_id"; <br>

$result = mysql_query($query)<br>
  or die(mysql_error());<br>
$count = mysql_num_rows($result);<br>
if ($count==0)<br>
  {<br>
  $color = "";<br>
  }<br>
else<br>
  {<br>
  $color = "red";<br>
  }<br>
echo span style='color:$color' ;<br>
echo $count;<br>
echo /span;<br>

同样这个while循环开始工作但是包含的文件导致循环在第一个记录返回后停止并产生以下输出...

肯尼斯(2)

所以我的问题是,有没有办法在不中断while循环的情况下显示我想要的结果? 如果有人能指出我正确的方向,我会很感激!

避免在瘟疫等代码中执行子查询,因为随着记录数量的增加,它将拖动数据库引擎; 认为<members> + 1查询。

您可以像这样创建查询以直接获得所需的结果(未经测试):

SELECT child_id, first_name, COUNT(friend_two) AS nr_of_requests
From children
LEFT JOIN friend_requests ON friend_one = child_id OR friend_two = child_id
WHERE parent_member_id = $member_id
GROUP BY child_id, first_name;

它根据朋友列将children表记录与friend_requests连接friend_requests ; 然后它根据child_id进行child_id以使count()工作。

每次循环时都不需要包含php文件。 尝试创建一个具有getFriendRequestCount()方法的Person类。 这个方法可以用于所有数据库。 这也意味着您可以创建getGriendRequests()这样的方法,这些方法可以返回朋友请求,名称等的数组。然后您可以使用count($ myPerson-> getFriendRequests())来获取数字。 成千上万的选择!

一个很好的起点, http://php.net/manual/en/language.oop5.php

另一个简单类的例子, http://edrackham.com/php/php-class-tutorial/

例如。

include ('class.Person.php');  
while(loop through members)
    $p = new Person(member_id)
    echo $p->getName()
    echo $p->getFriendRequestCount()
    foreach($p->getFriendRequests as $fr)
         echo $fr['Name']

在Person类中,您希望拥有一个构造函数,该构造函数从数据库中获取成员并将其保存到私有变量中。 然后,您的函数可以访问该变量,以在该成员上生成SQL查询。

只是为了澄清这里发生的事情。

解析脚本时执行“include”处理。 基本上它只是将包含文件中的文本复制到当前文件中。 完成此操作后,将解析逻辑。

您应该将任何包含语句与主逻辑分开。 在大多数情况下,“包含”代码将包含一个或多个函数的定义。 然后,您可以在适当的位置从程序主体中调用这些函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM