使用DataTable显示来自数据库的50行,可以搜索整个数据库

时间:2013-11-05 19:43:03

标签: php mysql jquery-datatables

我的数据库中有一张表来跟踪规格:

| specs |
id
spec_name
url
common_spec
notes

在此表中约有8,000个规格。我经常使用这些规格中的大约100种,而我需要的其余部分则需要使用它们。我使用DataTables来显示标记为common_spec的规范。那些规格有一个' 1'在common_spec列中。我有一个像这样的结构表:

<?php $specs = $specslist->get_specs(); ?>
<table id='commonSpecs'>
<thead>
<tr>
<th>Spec Name</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<?php foreach($specs as $spec): ?>
<tr>
<td><?php echo $spec['spec_name']; ?></td>
<td><?php echo $spec['notes']; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<script>
$(document).ready(function() {
    $('#commonSpecs').dataTable({
        "bJQueryUI" : true,
        "sPaginationType" : "full_numbers",
        "iDisplayLength" : 100
    });
</script>

MySQL查询是:

public function get_specs(){
    $query = $this->db->prepare("
        SELECT specs.url, specs.spec_name, specs.notes, specs.id FROM specs WHERE specs.common_spec = 1 GROUP BY specs.id ORDER BY specs.spec_name");
    $query->execute();
    return $query->fetchAll();
}

当我第一次打开页面时,我试图在表格中显示这些标有常见规格的100个规格,但允许搜索整个表格中的8,000个规格。

任何人都可以给我一个方向吗?这甚至可能吗?

提前致谢。

修改

这里的想法是避免从表中加载所有行,只加载最初符合特定条件的行(是common_spec),然后在/如果初始集不是&#39时允许搜索整个表。有规格。希望这一切都有道理。

1 个答案:

答案 0 :(得分:0)

您滥用GROUP BY。它仅对包含SUM(column)MAX(column)等函数的摘要查询很有用。

你可能想要这个:

     SELECT specs.url, specs.spec_name, specs.notes, specs.id 
      FROM specs
  ORDER BY specs.common_spec = 1 DESC, specs.spec_name
     LIMIT X,Y

ORDER BY specs.common_spec = 1 DESC会先在结果集中提取您的常用规格。表达式specs.common_spec = 1有两个可能的值,1和0。