Soru Trick;

3 Cevap php

Bir seri ilanlar web sitesi var, ve kullanıcıların reklamları arama yapabilirsiniz.

The results are displayed in three tabs on top of the page. These three are "All", "Private", and "Company". Each tab has a nr attached to it, which represents the nr of ads found in that tab.

Yani, örneğin:

  All     Private     Company
   5         3           2

All Özel + şirketin sadece bir toplamıdır!

Ben bir veritabanı olarak MySQL kullanıyorum.

Ben her sekme için bu "bulunan reklamların numaralarını" bulmak için bir yol bulmaya çalışıyorum.

Ben bu gibi, ama çok dağınık olduğu için başımı ağrıtıyor, bunu yapmanın bir yolu var:

$query = "SELECT SQL_CACHE * FROM classified WHERE classified.classified_id=$id";

        if ($adtypes=="Private"){
        $query_priv_comp = "SELECT SQL_CACHE * FROM classified WHERE priv_comp='Company'";
        }
        else {
        $query_priv_comp = "SELECT SQL_CACHE * FROM classified WHERE priv_comp='Private'";
        }

        switch ($adtypes){ 
            case "Private":
                $query.= " AND classified.priv_comp='Private'";
            break;

            case "Company":
                $query.= " AND classified.priv_comp='Company'";
            break;
        }

        $qry_result = mysql_query($query); // main query
        $result_priv_comp = mysql_query($query_priv_comp); // second query

        $num_priv_comp = mysql_num_rows($result_priv_comp);
        if ($adtypes=="All"){
        $num_total = mysql_num_rows($qry_result);
        }
        else if ($adtypes!="All"){
            $num_total=mysql_num_rows($qry_result) + mysql_num_rows($result_priv_comp);
        }

        if ($adtypes=="Private"){
        $num_private = $num_total - $num_priv_comp;
        $num_company = $num_priv_comp;
        }
        else {
        $num_company = $num_total - $num_priv_comp;
        $num_private = $num_priv_comp;
        }

Eğer bu yapılabilir başka bir yol biliyor musunuz?

Teşekkürler

BTW: buldum reklamların kullanıcıya bilgi görüntülemek için, çok satır ihtiyacımız var!

3 Cevap

Bu tam olarak ne gerek bağlıdır. Sadece sayıları gerekiyorsa nispeten kolay:

SELECT  count(*)                           count_all
,       sum(if(priv_com = 'Private', 1, 0)) count_private
,       sum(if(priv_com = 'Company', 1, 0)) count_company
FROM    classified
WHERE   classified.classified_id=$id

Öte yandan, hem sayıları hem de satır veri gerekiyorsa, veri ve sayıları için ayrı sorgu yapmak, ya da bir hile kullanmanız gerekir ya. Senin tablo bir id sütunu wich yapabileceğin, birincil anahtar var diyelim:

SELECT  count(*)                           count_all
,       sum(if(priv_com = 'Private', 1, 0)) count_private
,       sum(if(priv_com = 'Company', 1, 0)) count_company
,       classified.*
FROM    classified
WHERE   classified.classified_id=$id
GROUP BY id  -- group by on primary key
WITH ROLLUP

WITH ROLLUP sihirli tüm sorguya için sayıları ile size ekstra bir satır verecektir. Sadece pürüzle tüm sonuç son satırı olarak bu satır alırsınız, böylece veri önce sayılarını bildirmek istiyorsanız, satır bir php dizideki verileri ya da öylesine ve süreç önbelleğe zorunda gidiyoruz Daha sonra, sayfayı oluşturmak için.

Sen bir sorgu ile tüm sayımları seçebilirsiniz:

SELECT priv_comp, COUNT(*) AS record_count FROM classified GROUP BY priv_comp

Sonra geçerli sekme için gerekli tüm kayıtları sorgulayabilirsiniz.

Bu açık bir şekilde 2 ayrılmalıdır.

After your switch variable $query_priv_comp would be equal to:

SELECT SQL_CACHE * FROM classified WHERE priv_comp='Company' 
  AND classified.priv_comp='Private' 

veya

SELECT SQL_CACHE * FROM classified WHERE priv_comp='Private' 
 AND classified.priv_comp='Company'

Soru: What the difference???