2011-06-22 14 views
50

Hangi sebepten ötürü mysql sonuç kümesinden iki kez geçmem gerekiyor. Bunu yapmanın bir yolu var mı? Sorguyu iki kez çalıştırmak istemiyorum ve komut satırını yeniden yazmak zorunda kalmak istemiyorum, böylece satırları bir yere kaydedecek ve daha sonra yeniden kullanacaksınız.Mysql sonucu iki kez nasıl geçilir?

+1

İşaretçiyi sıfırlayan bu işlevi deneyin. http://php.net/manual/en/function.mysql-data-seek.php – afarazit

+0

Hangi MySQL kitaplığını kullanıyorsunuz? Genellikle iç göstergeyi sonuç kümesinde geri sarabilirsiniz. –

cevap

79

YANLIŞ dönecektir bir E_WARNING ve mysql_data_seek() başarısız olur Bu, bunun için doğru yol gibi görünmüyor. Neden ilk döngüde işlem yapmıyorsunuz?

+1

neden mysql_fetch_assoc()? mysql_fetch_array() –

+0

A-OK kullanabilir miyim: Evet, ne istersen. – phant0m

+0

Evet, yapabilirsin. Aynı şey, sadece almanın farklı yolları (sütun adı/sütun numarası). –

7

mysql_data_seek()'un gereksinim duyup duymadığını deneyin.

mysql_data_seek() belirtilen satır numarasını işaret belirtilen sonuç tanımlayıcı ile ilişkili MySQL sonucu iç satır hareket ettirir. mysql_fetch_assoc() gibi bir MySQL alma işlevi, satırını döndürür. 1. Ancak eğer sonuç kümesi (Mysql_num_rows() == 0), bir etmeye boş -

satırnum satırnum Mysql_num_rows() 0 aralığında bir değer olmalıdır 0 başlar Ben olurdu,

$result = mysql_query(/* Your query */); 
while($row = mysql_fetch_assoc($result)){ 
// do whatever here... 
} 

// set the pointer back to the beginning 
mysql_data_seek($result, 0); 
while($row = mysql_fetch_assoc($result)){ 
// do whatever here... 
} 

Ancak: 0 Bu yapabilirsin nasıl

2

Dahili göstericiyi veri kümesinin başına taşımak için mysql_data_seek'u kullanabilirsiniz. Sonra, tekrar tekrar yineleyebilirsiniz.

2

Ben bu denemedim itiraf, ancak önce kayda gitmek için ilk yineleme

mysql_data_seek($queryresult,0); 

sonra denediniz mi?

0

Eh, her zaman okunan satır sayısını saymak olabilir ve sonra böyle bir şey yapmak: Eğer gerekir neden

if (rownumber == mysql_num_rows($result)) { mysql_data_seek($result, 0); } 

Bilmiyorum, ama öyle. verilere Alternatif aramak

3

bir diziye değerleri saklamaktır: mysqli için

$arrayVals = array(); 
$result = mysql_query(/* Your query */); 
while($row = mysql_fetch_assoc($result)){ 
    $arrayVals[] = $row; 
} 

// Now loop over the array twice instead 

$len = count($arrayVals); 
for($x = 0; $x < $len; $x++) { 
    $row = $arrayVals[$x]; 

    // Do something here  
} 

$len = count($arrayVals); 
for($x = 0; $x < $len; $x++) { 
    $row = $arrayVals[$x]; 

    // Do something else here 
} 
+0

Tüm bu ve sadece dizi satırları döndürür ve yapar multiRow() çağıran bir yardımcı işlev yazdım. –

1

aşağıdakileri yapmanız gerekir;

$result= $con->query($sql); // $con is the connection object 
$result->data_seek(0);