我的数据库中有一张表来跟踪规格:
| 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时允许搜索整个表。有规格。希望这一切都有道理。
答案 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。