2012-05-25 25 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