0

我的数据库中有一个表来跟踪规范:

| specs |
id
spec_name
url
common_spec
notes

此表中有大约 8,000 个规格。我经常使用这些规格中的大约 100 种,而其余的我需要手头以防万一需要使用它们。我使用 DataTables 来显示标记为 common_spec 的规范。这些规范在 common_spec 列中有一个“1”。我有一个结构如下的表:

<?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),然后在/如果初始集没有规范时允许搜索整个表. 希望这一切都有意义。

4

1 回答 1

0

你在滥用GROUP BY. 它仅对包含类似SUM(column)or的函数的摘要查询有用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。

于 2013-11-05T21:20:22.250 回答