PHP () Döngü Durdur iken

2 Cevap php

Ben yüzlerce olmasa bile tek bir kayıt görüntüleyen bir php döngü var.

burada kodu:

<?php

$result1 = mysql_query("SELECT * FROM posts") or die(mysql_error());  
$numexem = mysql_num_rows($result1);
$s="0";

while($s<$numexem){
$postid=mysql_result($result1,$s,"id");
echo "Post id:".$postid;

$result2 = mysql_query("SELECT * FROM pics WHERE postid='$postid'") or die(mysql_error());  
$rows = mysql_fetch_array($result2) or die(mysql_error());
$pnum = mysql_num_rows($result2);

echo " There is ".$pnum." Attached Pictures";

$s++;
}

?>

I'm wondering if the loop stop because there is other SQL query inside it or what? and i don't think so.

Teşekkürler

2 Cevap

Ben daha geleneksel bir yaklaşım öneririm:

$result1 = mysql_query("SELECT * FROM posts") or die(mysql_error());  
while ($row = mysql_fetch_assoc($result1)) {
  ...
}

Ayrıca, bütün bu alt sorguları yapmıyoruz. Bunun yerine:

$sql = <<<END
SELECT *, (SELECT COUNT(1) FROM pics WHERE postid = p.postid) pic_count
FROM posts p
END;
$res = mysql_query($sql) or die($sql . ': ' . mysql_error());
while ($row = mysql_fetch_assoc($res)) {
  echo "$row[postid] has $row[pic_count] pictures\n";
}

Hayır, olmaz. Varsayılan olarak, MySQL PHP modül Sorgunuzla eşleşen tüm satırları prefetches, böylece kod endişelenecek bir şey yok.

Ancak, yüz sorgu yürütülürken zaman alıcı olabilir. Sen ziyade SQL IN operatörü kullanarak one tek bir sorgu gerçekleştirmek ve sonra bu sonuçları almak, ilk döngü tüm kimlikleri toplamak istiyorum. Eğer mümkün olduğunca çok "yuvalama" sorguları kaçının.