好吧 - 这可能是一个愚蠢的问题,但我对完美的渴望激励着我,所以,如果它是愚蠢无意义的,请告诉我。
我有一个mysql查询,我从数据库表中获取行,并且我需要以我收集的所有列的某种形状或形式的值。请看下面的示例代码(这可以使用数组来收集输出 - 基本问题应该是相同的):
$query="SELECT A,B,C,D FROM table1 WHERE 'X'='Y'";
$result=mysql_query($query,$resource);
while($row=mysql_fetch_assoc($result)){
$var1=$row['A']; $var2=$row['B'];
echo '<li class="' . $row['C'] . '" id="' . $row['D'] . '">';
}
我的问题如下:
我只需要$ row ['A']和$ row ['B'],因为在这种情况下它们对于每一行都是相同的值,但我确实需要它们一次。其他值对于每一行都是不同的,我也需要它们,如示例所示。
在整个循环中连续设置变量是否有问题?或者使用if(!isset
......更好吗?还是有其他方法可以做到这一点?或者表现是如此微不足道,以至于使这个问题无关紧要?
由于
答案 0 :(得分:1)
为什么不在循环外设置变量。
$result=mysql_query($query,$resource);
$result_new = mysql_fetch_assoc($result);
$var1 = $result_new['A']; //considering $result_new['A'] always exists
$var2=$result_new['B']; //considering $result_new['B'] always exists
while($row=$result_new){
echo '<li class="' . $row['C'] . '" id="' . $row['D'] . '">';
}
答案 1 :(得分:1)
真的不要理会。除非你循环数百万条记录。
如果您需要更高的速度,请不要在while循环中回显:
$result=mysql_query($query,$resource);
$string ='';
if ($result) {
$row=mysql_fetch_assoc($result);
$string .= '<li class="' . $row['C'] . '" id="' . $row['D'] . '">';
$var1=$row['A'];
$var2=$row['B'];
while($row=mysql_fetch_assoc($result)){
$var1=$row['A']; $var2=$row['B'];
$string .= '<li class="' . $row['C'] . '" id="' . $row['D'] . '">';
}
}
echo $string;
还有两件事。不要使用mysql_ *:不鼓励使用此扩展名!
并且(就像我以为别人说过的话)如果a / b总是一样的话,你应该重新考虑你的数据库结构。
编辑: 为您的问题提供真实的答案: 我做了一个小测试。 在每个循环上设置值(1,000次)需要0.00027s。如果已经设置了值,则在循环内部检查需要0.00030s。所以每次设置它都比检查更快。
答案 2 :(得分:1)
这种情况下的性能影响是无关紧要的,事实上我会猜测if(isset..)
警卫是否会花费更长的时间 - 只有我能想到的情况,这个问题在哪里重要将是一种情况您将(较大的)对象或数组分配给$var1
并以某种方式强制php制作副本而不是参考
如果由于审美原因而困扰你(我可以联系;)),你可以使用do-while循环:
//assuming you always get at least one result
$result=mysql_query($query,$resource);
$row=mysql_fetch_assoc($result);
$var1=$row['A']; $var2=$row['B'];
do {
// the loop stuff - stringify or echo the list
} while ($row=mysql_fetch_assoc($result)) ;
答案 3 :(得分:1)
你可以用do-while表达式
来做$query="SELECT A,B,C,D FROM table1 WHERE 'X'='Y'";
$result=mysql_query($query,$resource);
if($row=mysql_fetch_assoc($result)) {
$var1=$row['A']; $var2=$row['B'];
do {
echo '<li class="' . $row['C'] . '" id="' . $row['D'] . '">';
} while($row=mysql_fetch_assoc($result));
}