简体   繁体   中英

Using COUNT & Distinct in PHP pagination

HI I have a PHP Pagination system, what i am trying to do is use Distinct to return only unique values, what happens is the page shows how many pages there should be but doesn't give me any results.

My code is here

$query = "SELECT DISTINCT ip_address, 
                 COUNT(*) as num 
          FROM $tableName  
          WHERE hostname 
          LIKE 'mail%' AND type='6'";
$total_pages = mysql_fetch_array(mysql_query($query));
$total_pages = $total_pages[num];

$stages = 3;
$page = mysql_escape_string($_GET['page']);

if($page){
    $start = ($page - 1) * $limit; 
}else{
    $start = 0; 
}   

// Get page data
$query1 = "SELECT DISTINCT ip_address, 
                  hostname 
            FROM masterip_details  
                WHERE hostname 
            LIKE 'mail%' AND type='6' 
                LIMIT $start, $limit";
$result = mysql_query($query1);

You should put the DISTINCT inside the COUNT function to count the number of unique IP adresses in your $tableName table. Like this:

$query = "SELECT COUNT(DISTINCT ip_address) as num 
             FROM $tableName  
             WHERE hostname 
             LIKE 'mail%' AND type='6'
         ";

If you don't have an index on the ip_address field, I'd just use SELECT COUNT(DISTINCT ip_address) as num . If you have an index, you could just as well do this:

SELECT COUNT(type) AS num FROM tbl WHERE hostname LIKE 'mail%' and type = 6 GROUP BY ip_address;

Because, if you're grouping on an index, DISTINCT is equivalent to GROUP BY . More details here and here .

The real reason for my answering this question though: Please , don't use the deprecated mysql_* extension . Use either one of the replacements, mysqli_* , with i for improved , or PDO, which seems to be more commonly used .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM