MySQL: set sonucu sadece sayısını alın

4 Cevap php

PHP / MySQL ile MVC kullanıyorum.

Suppose I am using 10 functions with different queries for fetching details from the database.
But at other times I may want to get only the count of the result that will be returned by the query.
What is the standard way to handle such situation.
Should I write 10 more functions which duplicate almost whole query and return only the count.
Or
Should I always return the count also with the result set
Or
I can pass a flag to indicate that the function should return count only, and then based on the flag I will dynamically generate the (select part of) query.
Or
Is there a better way?

4 Cevap

Şimdi mysql alt sorguları destekler, kullandığınız herhangi bir sorgu için sayıları alabilirsiniz:

  $count_query="SELECT COUNT(*) FROM ($query)";

Ne kadar zor olduğunu?

Ancak bu yaklaşım her zaman yerine sadece birine (- denemek ve görmek MySQL mutlaka saymak için önbelleğe alınmış bir sonuç kümesi kullanmak mümkün olurdu emin değilim) iki sorguları çalışıyor demektir.

Zaten getirilen ettiyseniz tüm sonuç muhtemelen daha hızlı bir sorgu yayımlayarak daha PHP satırları sayma olacak ayarlayın.

Önce bir sınır açıklamada uygulamasından eşleşen satır sayısını dönecekti MySQL 2 fonksiyon vardır:

SQL_CALC_FOUND_ROWS ve FOUND_ROWS ()

görmek

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows

C.

Belirli kriterlere uyan tüm satırların tek sayısını isterseniz, yerine sonuç sayısını, ama sadece saymak seçmek başka bir sorgu (*) kullanmak gerekir.

Hem veri ihtiyacı ve sayımı ise, neden sadece sonuçlanan dizide () sayısı kullanmak değil mi?

s sayımı, ancak her 10 Sorgu ama tek bir veritabanı erişimi sınıf için farklı sınıflar; başka bir yolu hem veri dönmek ve bu ki bazı class kullanmaktır.

Ben bayrak fikri ile gitmek istiyorum.

10 daha fazla işlev ve kopyalama / yapıştırma kod yazma tüm okunabilirliği yardımcı olmuyor. Her zaman da sayısını dönerseniz, o yalnızca sayısında ilgilendiğiniz zaman, veritabanı hala fena halde verimsiz olabilir tam sonuç kümesi oluşturmak ve iletmek zorunda olduğu anlamına gelir.

Bayrağı ile, gibi bir şey olurdu

function getData($countOnly=false) {
    // ...generate FROM and WHERE clause
    if ($countOnly) {
        $query = 'SELECT COUNT(*) '.$query;
    } else {
        $query = 'SELECT field1, field2, ...'.$query.' ORDER BY ...';
    }
    ...
}

Ben genellikle yöntemler arasında paylaşılan mümkün olduğunca kodu var çalışacaktı. : Bir olasılık olacaktır

  • have one select() and one count() functions
    • sorgunun belirli bir kısmını bina her biri
  • and one buildFromAndWhere() function to build the parts of the query that are common.
    • var ve select() ve count() bunu kullanamazsın


Written in pseudo-code, it could look a bit like this :

function select($params) {
    return "select * "
            . from()
            . where($params)
            . "limit 0, 10";
}

function count() {
    return "count(*) as nbr "
            . from()
            . where();
}

function from() {
    return "from table1 inner join table1 on ... ";
}

function where($params) {
    // Use $params to build the where clause
    return "where X=Y and Z=blah";
}

Bu şekilde, from() mümkün olduğunca ortak kodu ve where() fonksiyonları - sorgularının hard kısmı dikkate orada sık sık, bunun için var iyi.


I prefer having two separate functions to select and count ; I think it make code easier to read and understand.

I (list of results and the total count) iki ayrı veri dönen bir yöntemin fikirlerini sevmiyorum; ve ben gerçekten bir bayrak geçen fikir gibi ya da yok: işlevin çağrısı bakarak, bu parametre ne anlama geldiğini biliyorum asla.