2011-03-20 88 views
0

我试图让这将显示该行Ÿ顶部X结果我设置功能,这种情况下我使用的行数浏览器和顶部结果来自我的表统计,其中只是为了消除搜索Bot结果显示。我也希望它也返回行数的计数。因此,假设浏览器'Safari'有10个结果,那么它会返回10个结果以及结果本身。结果排序该行

$display->show_list('statistics', 'browser', '5', 'WHERE browser!=\'Search Bot\''); 

这是我的功能。我把它清理了一下,以除去某些检查和输出如果查询发生故障等

function show_list($table, $row, $limit = 5, $where = NULL) { 

$item = mysql_query("SELECT DISTINCT $row FROM $table $where LIMIT $limit"); 

      $result = array(); 

while ($fetch = mysql_fetch_array($item)) { 

      $result[] = $fetch; 
} 
      return $result; 
} 
+2

...问题是? – Hogan 2011-03-20 11:48:48

+0

我将如何去做我所描述的事情,因为这目前不会输出特定行的发生次数,这正是我希望它做的事情。 – paulwilde 2011-03-20 11:51:29

+0

如果$ where是ever = NULL,因为你的函数定义暗示那么你的SQL语句将会南下! – Martin 2011-03-20 11:52:36

回答

2

不知道我理解的问题,但对于使用group by条款,在您的SQL查询:

select your_column, count(*) 
from your_table 
where ... 
group by your_column 
order by count(*) desc 
limit 5 

这将让你:

  • your_column每个值,
  • 将与该行数值
  • ,你会保持有行
+0

对不起,忘了实际问这个问题,但是你回答了这个问题,这工作表示感谢。我使用了'SELECT $ row,COUNT(*)作为数量FROM'来确定列的数量,这正是我想要的,但是这个组也有所帮助。 – paulwilde 2011-03-20 12:00:17

0

改变这一行的最大数量的your_column的5个值:

$item = mysql_query("SELECT $row, count(*) as rows FROM $table $where GROUP BY count(*) ORDER BY count(*) DESC LIMIT $limit"); 

这样做之后,你可能不希望与混合此您的通用show_list功能。

随机音符。 DISTINCT在数据库上往往有点贵。我会避免默认做这件事。

顺便说一句,你的缩进是..有趣。没有一个体面的程序员会想要在不重新格式化一些一致的缩进方案的情况下使用该代码。大约有格式化的最佳方式无休止的争论,但下面将是你的原代码合理的缩进:

function show_list($table, $row, $limit = 5, $where = NULL) { 

    $item = mysql_query("SELECT DISTINCT $row FROM $table $where LIMIT $limit"); 

    $result = array(); 

    while ($fetch = mysql_fetch_array($item)) {  
     $result[] = $fetch; 
    } 
    return $result; 
} 
+0

谢谢。是的,我同意我的缩进不是最好的,我需要改进它,我同意你的可读性更强。 – paulwilde 2011-03-20 12:11:20

0
function show_list($table, $column, $limit = 5, $where = '') { 
    $item = mysql_query("SELECT $column, COUNT(*) AS c FROM $table $where 
      GROUP BY $column ORDER BY c LIMIT $limit"); 
    $result = array(); 
    while ($fetch = mysql_fetch_array($item)) { 
     $result[] = $fetch; 
    } 
    return $result; 
} 
  • 更换rowcolumn - 我们实际上是在传递一个列名变量。
  • $where = null替换为$where = '' - 即使当$wherenull时,它也将确保查询正常工作。
  • 修改查询以生成预期结果(尽我所能了解您的问题)
  • 重新格式化代码并正确缩进它。