nasıl ben iken başka bir döngünün içine while döngüsü controll olabilir

5 Cevap php

Ben böyle bir while döngü olduğunu varsayalım:

$sql = mysql_query("SELECT * FROM tablename");
while($row = mysql_fetch_array($sql)){

  $id = $row["id"];
  $sql_2 = mysql_query("SELECT * FROM secondtable WHERE id != $id ");
  while($ro = mysql_fetch_array($sql_2)){
   $id2 = $ro["id2"];
   echo $id2;
   }

}

İlk sorgu dönüş 5 sonuç 1-5 yani ve ikinci sorgu i ikinci sorgulamak echo istiyorsanız daha 3 sonuç dönerse o zaman böyle bana verir ..........

111112222233333

o yüzden 123 için nasıl düzeltebilirim daha ikinci döngü bana izin kez sayısına göre yürütmek gerekir iken ........! ben bunu nasıl yapabilirim .........!

5 Cevap

Ben% 100 sorunuzu anlamak emin değilim - biraz belirsiz.

Bu GROUP BY yan tümcesi ile sorguda bu çözebilir mümkün

$sql_2 = mysql_query("SELECT id FROM secondtable WHERE id != $id GROUP BY id");

Eğer just secondtable.id değil, diğer sütunların herhangi bir ihtiyacınız varsa Ama bu sadece çalışmak istiyorum.

Eğer "Bana izin zaman sayısı" demek ne zaman keyfi değer çeşit demek? Eğer öyleyse, o zaman böyle Greg B çözeltisi gibi farklı bir döngü mekanizması, kullanmanız gerekir.

Açıkça iç döngü yineleme sayısını sınırlamak istiyor musunuz?

Eğer döngü için kullanarak düşündünüz mü?

$sql = mysql_query("SELECT * FROM tablename");

while($row = mysql_fetch_array($sql)){
    $id = $row["id"];
    $sql_2 = mysql_query("SELECT * FROM secondtable WHERE id != $id ");

    for($i=0; $i<3; $i++){
       $ro = mysql_fetch_array($sql_2);
       $id2 = $ro["id2"];
       echo $id2;
    }
}

İlk while döngüsü her 5 sonuç, bir anda üzerinde yineleme edilir.

Sizin ikinci döngü bu (15 sonuçları toplam 5 yineleme her biri için, yani 3 sonuçlar) sonuçların kendi ayarlanmıştır üreten, 5 sonuç her yineleme iken.

I believe what you are trying to do is exclude all IDs found in your first loop from your second query. You could do that as follows:

$sql = mysql_query("SELECT * FROM tablename");
$exclude = array();
while($row = mysql_fetch_array($sql)) {
    array_push($exclude, $row['id']);
}

// simplify query if no results found
$where = '';
if (!empty($exclude)) {
    $where = sprintf(' WHERE id NOT IN (%s)', implode(',', $exclude));
}

$sql = sprintf('SELECT * FROM secondtable%s', $where);
while($row = mysql_fetch_array($sql_2)) {
   $id2 = $row["id2"];
   echo $id2;
}
$sql = mysql_query("SELECT * FROM tablename");
$tmp = array();
while($row = mysql_fetch_array($sql)){

    $id = $row["id"];
    if(!in_array($id, $tmp)) {  
        $sql_2 = mysql_query("SELECT * FROM secondtable WHERE id != $id ");
        while($ro = mysql_fetch_array($sql_2)){
            $id2 = $ro["id2"];
            echo $id2;
        }
        $tmp[] = $id;
    }
}

Zaten sorgulanan edilmiş ise bir sonraki yineleme üzerinde kontrol etmek için bir dizideki tüm sorgulanan $ id Saving. Ben de ilk sorgu sonucu gruplama daha iyi bir yol olacağını düşünüyorum.

Ben gerçekten burada sormak için çalışıyoruz ne olduğu belli değil ki Leonardo Herrera katılıyorum. Eğer sorunuzu yazabilirsiniz eğer yardımcı olacaktır. Eğer bir tablo sorgulamak için çalışıyor ve başka bir tabloda bulunan id dahil değil gibi biraz geliyor. Sen gibi bir şey deneyebilirsiniz:

SELECT * FROM secondtable t2
WHERE NOT EXISTS (SELECT 1 FROM tablename t1 WHERE t1.id = t2.id);