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)またはのような関数を含む要約クエリにのみ役立ち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 の 2 つの値があります。

于 2013-11-05T21:20:22.250 に答える