簡體   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