Bir "mysql_query" sonuçlarından satırları sayma

10 Cevap php

Ben bu varsa:

$results = mysql_query("SELECT * FROM table_name WHERE id=$id");

denetlemek için herhangi bir yolu daha sonra orada kaç "Özel" ya da "Şirket" bir alan değerine sahip satırları?

Ben başka bir sorgu yapmadan, bulunan kaç "Özel" ve "Şirket" kayıtları kullanıcıyı göstermek gerekir. ("Özel" veya "şirket" ya da içeren 'ad_type' adında bir sütun var)

Zaten tüm satırları sayma için mysql_num_rows biliyorum!

EDIT: There are 500thousand records! So maybe an iteration through the result is slow, what do you think?

Tüm yardım için teşekkürler :)

10 Cevap

Yukarıdaki cevaplar büyük ve hepsi, ancak şu anda kontrol cevabı çok verimsiz veri büyük miktarda ile ilgili olmalıdır çalışacak

Yukarıdaki cevap örneği (Gal ile)

$results = mysql_query("SELECT *,(SELECT COUNT(*) FROM table_name WHERE column=$value) count FROM table_name WHERE id=$id");

İyi ve hepsi ve neye ihtiyacınız verir ama belirgin tasarım kusur SQL server bunları yeniden dönmek ve sadece saymak bakmak sonra sonuçları döndürmek yapma büyük miktarlarda veri için çok yetersiz olmasıdır.

Sadece bunu:

$results = mysql_query("SELECT * FROM table_name WHERE column=$value");
$num_rows = mysql_num_rows($result);

Aynı sonuçlar ve çok daha verimli, uzun vadede olması, ayrıca daha büyük miktarlarda veri için olacaktır.

Sen gibi bir şey yapabilirsiniz:

$results = mysql_query("SELECT *,(SELECT COUNT(*) FROM table_name WHERE column=$value) count FROM table_name WHERE id=$id");

sql ile numarasını almak için.

Bir sayımı almak için adımlar ():

  1. saymak almak için mysql_query () kullanın,
  2. sadece 1 satır almak için mysql_fetch_array () kullanın
  3. satır bir tek sütun olsun, bu, kaçıncı

Burada bir örnek e-posta zaten kullanılmış olup olmadığını kontrol edin, hangi geçerli:

// check whether email used
$check_email_sql = "select count(*) from users where email='$email'";
$row = mysql_fetch_array(mysql_query($check_email_sql));
$email_count = $row[0];

Sırasıyla, satır sonuç kümesi yineleme ve Private ve Company ad_type içinde olay sayısını saymak?

Ne here hakkında sorular koduyla yanlış var? Yani istenen etkiyi sağlamak gerekir.

Sen yapabilirsin

SELECT COUNT(*) FROM table_name WHERE id=$id GROUP BY fieldvalue HAVING fieldvalue = "Private"
SELECT COUNT(*) FROM table_name WHERE id=$id GROUP BY fieldvalue HAVING fieldvalue = "Company"

ama bu başka bir sorgu olacaktır. Eğer zaten verilerin işlenmesi halinde Ancak, sadece sorguyu yaptıktan sonra "Özel" ve "Şirket" satır sayısını özetlemek olabilir.

Eğer bu kullanım, tüm sonuçları almak zorunda değilsiniz.

SELECT ad_type, COUNT(*)
FROM table_name
WHERE (id=$id)
GROUP BY ad_type
HAVING ((ad_type = 'Private') OR (ad_type = 'Company'))

Hala id = $id, o iş olmaz tüm kayıtları almak için var. Ama gerçek veri getiriliyor önce (bir kez) bu tür bir sorgu yürütülürken bir alt sorgu kullanarak daha verimli olmalıdır.

Eğer sorguyu değiştirmek istemiyorsanız size bir yapabilirdi

$results = mysql_query("SELECT * FROM table_name WHERE id=$id");
$count = mysql_num_rows($results);

Bu sorgu işi yapmak istiyorsunuz sanırım:

SELECT ad_type, count(*) FROM table_name WHERE id=$id GROUP BY ad_type; 

I don't see any reason so far to use HAVING, since you probably want to show the user an overview of all the ad_type's found in DB (at least you didn't mention that there are other values for ad_type then the two given). I also strongly suggest NOT to use sub-queries; always try to use just one. If there's one thing that will slow your query down, it's a subquery (or subqueries).

İyi şanslar!

Sorgunun sonuçları yineleme ve yerel değişkenler sırıtmak kaç her bir sayısını tutmak.