2012-05-25 27 views
0

在我的PHP腳本我做的mysql_query:PHP獲得一個變量從while循環外

$full_alarm_sql = " 
      SELECT alarms.id, alarms.date, clients.name, clients.number, alarms.controller, alarmstype.type, 
      alarms.alarmstatus, alarms.starttime, alarms.endtime, DATEDIFF(CURDATE(), alarms.date) AS difference 
      FROM alarms 
      LEFT JOIN clients ON alarms.clientid = clients.id 
      LEFT JOIN alarmstype ON alarms.typeid = alarmstype.id 
      WHERE DATEDIFF(CURDATE(), alarms.date) <=" . $type . " AND clients.number = " . $market; 
    $full_alarm_query = mysql_query($full_alarm_sql); 

,然後我做一個表內while循環與查詢取:

while ($full_alarm_fetch = mysql_fetch_array($full_alarm_query)) { 
    $content .= 
    " 
      <tr> 
      <td>" . $full_alarm_fetch['date'] . "</td> 
      <td>" . $full_alarm_fetch['number'] . " | " . $full_alarm_fetch['name'] . "</td> 
      <td>" . $full_alarm_fetch['controller'] . "</td> 
      <td>" . $full_alarm_fetch['type'] . "</td> 
      <td>" . $full_alarm_fetch['alarmstatus'] . "</td> 
      <td>" . $full_alarm_fetch['starttime'] . "</td> 
      <td>" . $full_alarm_fetch['endtime'] . "</td> 
     </tr>"; 
    $client_name = $full_alarm_fetch['name'] . ' | ' . $full_alarm_fetch['number']; 
} 

,然後我需要使用

$full_alarm_fetch['name'] . ' | ' . $full_alarm_fetch['number']; 

所以我現在做的方式只是似乎不是最好的方式,這意味着variabl e循環內部的while循環將被重寫,直到循環結束,並且我可以使用獲取信息。

我想知道是否有更好/有效的方式做我想做的事情。

在此先感謝。

回答

1

是的,還有更好的辦法。您可以先聲明一個數組,然後將獲取的內容保存在那裏,然後遍歷數組。喜歡這個。

$fetched_arr = array(); 
while ($full_alarm_fetch = mysql_fetch_array($full_alarm_query)) { 
    $fetched_arr[] = $full_alarm_fetch; 
} 

那麼循環數組

foreach($fetched_array as $something) 
{ 
    //here you can save the values in the $content 
    // you can use $somethin['date'] and etc.. 
} 
+0

感謝您的快速響應,你們倆。但是再次添加另一個函數(for循環)來拉取兩個我已經在另一個變量中的變量聽起來不正確。是不是對腳本中已有的信息有太多的代碼?另一種方法,我可以做到這一點是通過將變量$ client_name作爲FALSE,在循環和循環中創建一個if(!$ client_name){$ client_name = $ statics_fetch ['number']。 「|」。 $ statics_fetch ['name'];},並且變量的設置只會出現一次,但thanagain if語句現在正在重複它自己.. – FedeSc

+0

@FedeSc:我也不會使用另一個循環。在每個循環中,這會明顯地比執行時重寫變量更昂貴。就像你說的,你可以檢查變量是否已經有值,或者,既然你知道這個數字,你可以爲這個名字做一個單獨的查詢。但是,如果您期望在主查詢中有很多行,這隻會是有益的。無論哪種方式,這不是一件失去太多時間,數組查找和變量賦值都是非常快的操作 – cypherabe

+0

@cypherabe - 是的,我考慮過另一個查詢,考慮到執行時間。所以我想我會堅持價值變化的方法。感謝所有關於此事的諮詢。乾杯費德。 – FedeSc

2

你的代碼是正確的。您可以抓住整個RS一次,然後循環播放,

while ($rs[] = mysql_fetch..); 
//done.. 
for($i=0;$i<sizeof($rs);$i++) or 
foreach($rs as $rec) 

給人帶來的好處:在RS向後在PHP

  • 緩存中的RS(串行數據)
+0

感謝您的快速回復,我向您回覆上面的答案以供我評論。問候。 – FedeSc