我确信我无法解决这个问题,因为缺乏对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)Kenneth
2)拉里
我尝试做的事情也显示了每个孩子在他们名字旁边的朋友请求数量......就像这样
Kenneth(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循环开始工作但是包含的文件导致循环在第一个记录返回后停止并产生以下输出......
Kenneth(2)
所以我的问题是,有没有办法在不中断的情况下显示我想要的结果 while循环?如果有人能指出我正确的方向,我会很感激!!
答案 0 :(得分:2)
避免在瘟疫等代码中执行子查询,因为随着记录数量的增加,它将拖动数据库引擎;认为<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
;然后,它会根据child_id
进行分组,以使count()
工作。
答案 1 :(得分:0)
每次循环时都不需要包含php文件。尝试创建一个具有getFriendRequestCount()方法的Person类。这个方法可以用于所有数据库。这也意味着您可以创建getGriendRequests()这样的方法,这些方法可以返回朋友请求,名称等的数组。然后您可以使用count($ myPerson-&gt; getFriendRequests())来获取数字。成千上万的选择!
一个很好的起点,http://php.net/manual/en/language.oop5.php
简单类的另一个例子,http://edrackham.com/php/php-class-tutorial/
EG。
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查询。
答案 2 :(得分:0)
只是为了澄清这里发生的事情。
“include”处理在解析脚本时完成。基本上它只是将包含文件中的文本复制到当前文件中。完成此操作后,将解析逻辑。
您应该将任何包含语句与主逻辑分开。在大多数情况下,“包含”代码将包含一个或多个函数的定义。然后,您可以在适当的位置从程序主体中调用这些函数。