Mysql_num_rows verimli ve / veya standart bir uygulama mı?

3 Cevap php

Bir süre önce ben yerine MySQL kullanmak için bağlantı benim sitelerin bazıları çalışırken, SQLite etrafında alay edildi. Ben PHP'nin mysql_num_rows() gibi sonuçlar, saymak için bir fonksiyon eksikliği takıldım. Biraz arama yaptıktan sonra ben de verimsiz çünkü SQLite bu özelliğe sahip olmadığını (anladığım kadarıyla) diyor ki, this mail list keşfetti. Bu iade kaç satır bilmek gerekir kod yazmak kötü şekli olduğunu belirtiyor.

Ben genelde mysql_num_rows boş dönüş sonuçları kontrol etmek için kullanın. Örneğin:

$query = "SELECT * FROM table WHERE thing = 'whatever'";
$results = mysql_query($query);

if (mysql_num_rows($results)) {
	while ($row = mysql_fetch_array($results)) {
		echo "<p>$row[whatever]</p>";
	}
} else {
	echo "<p>No results found</p>";
}

SQLite toplumda mysql_num_rows() kavramının için şiddetli tiksinme PHP düzenli MySQL için o korkunç verimli olursa beni meraklandırıyor.

mysql_num_rows() yanı sıra PHP ayarlanmış bir MySQL sonuç boyutunu kontrol etmek için daha iyi, daha kabul gören bir yöntem var mı?

EDIT: I'm not just using mysql_num_rows to get the count--I would use a COUNT query for that. I'm using it to check if there are any results before outputting everything. This is useful for something like displaying search results - it's not always guaranteed that there will be results. In SQLite world, I have to send one COUNT query, check if there is something, and then send a SELECT query to get everything.

3 Cevap

Zaten mysql_fetch_array() sonuçlar var eğer sana söylüyorum bir şey var. ({[) (1]} den) almak için daha fazla satır yoksa false döndürür.

$query = "SELECT * FROM table WHERE thing = 'whatever'";
$results = mysql_query($query);
if($results) {
    $row = mysql_fetch_array($results);
    if($row) {
        do {
            echo "<p>{$row[whatever]}</p>";
        } while($row = mysql_fetch_array($results));
    } else {
        echo "<p>No results found</p>";
    }

} else {
    echo "<p>There was an error executing this query.</p>";
}

Ne olursa olsun aslında SELECT ed, tüm satırları hala iade edilir ne kullanmak olsun veya olmasın. Sadece sonuçları kaçırıyorsun, ama yine veritabanı sizin için tüm iş yapmak yapıyoruz çünkü bu korkunç verimsiz olduğunu. Yaptığın bütün sayma ise, hiçbir şey için tüm bu işlem yapıyoruz. Sizin çözüm basitçe kullanmak için COUNT(*). Sadece COUNT(*) sizin SELECT bildirimde olurdu ve gitmek için iyi bir konum nerede takas.

Ancak, bu çoğunlukla COUNT için tam bir yedek olarak kullanan kişiler için geçerlidir. Senin durumunda, kullanım gerçekten hiç fena değil. Sadece manuel (bu SQLite kullanıcılar için tercih edilen bir çözümdür) ve döngü onları saymak gerekir.

Varlık nedeni altta yatan SQLite API olduğunu. Bu doesn't return the whole result set kerede, orada kaç sonuç bilmenin bir yolu vardır.

Posta listesinde açıklandığı gibi buldum. Bu (kalan) tamamını tutmak için çok fazla bellek tahsis etmek gerekir, çünkü satır sayısını döndürmek için verimsiz set sonuçlanabilir. Ne yapabileceğini, çıktı bir şey varsa sadece test etmek için bir boolean kullanmaktır.

$query = "SELECT * FROM table WHERE thing = 'whatever'";
$results = mysql_query($query);

$empty_result = true;
while ($row = mysql_fetch_array($results)) {
    echo "<p>$row[whatever]</p>";
    $empty_result = false;
}

if ($empty_result) {
    echo "<p>No results found</p>";
}