1

嗨,我有一个 PHP 分页系统,我想做的是使用 Distinct 仅返回唯一值,发生的情况是页面显示应该有多少页面,但没有给我任何结果。

我的代码在这里

$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);
4

2 回答 2

0

如果您在该字段上没有索引ip_address,我只会使用SELECT COUNT(DISTINCT ip_address) as num. 如果你一个索引,你也可以这样做:

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

因为,如果您在索引上进行分组,DISTINCT则相当于GROUP BY. 更多细节在这里这里

我回答这个问题的真正原因是:请不要使用已弃用的mysql_*扩展名。使用其中一种替代品 ,mysqli_*ifor ImprovementPDO,这似乎更常用

于 2013-05-25T10:28:11.640 回答
0

您应该将函数放在函数DISTINCT内部COUNT来计算表中唯一 IP 地址的数量$tableName。像这样:

$query = "SELECT COUNT(DISTINCT ip_address) as num 
             FROM $tableName  
             WHERE hostname 
             LIKE 'mail%' AND type='6'
         ";
于 2013-05-25T10:16:33.710 回答