2012-05-25 2 views
0

в моем PHP скрипт я сделать mysql_query:PHP Получение переменной вне из цикла в то время как

$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 ($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

спасибо за быстрый ответ, вы оба. но снова добавив еще одну функцию (для цикла) для вытягивания двух переменных, которые я уже получил в другой, просто не звучит правильно. не слишком ли много кода для информации, которую я уже имею в скрипте? другим способом я мог бы это сделать, указав переменную $ client_name как FALSE, прежде чем цикл и в цикле сделают if (! $ client_name) {$ client_name = $ statics_fetch ['number']. «|». $ statics_fetch ['name'];}, а параметр переменной будет возникать только один раз, но если оператор 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) 

дает преимущества:

  • кэш РС на PHP (сериализованные данные)
  • прыжок назад в RS
+0

Благодарим вас за быстрый ответ, я передам вам ответ выше для моего комментария. С уважением. – FedeSc

Смежные вопросы