Используйте DataTable для отображения 50 строк из базы данных с возможностью поиска по всей базе данных

У меня есть таблица в моей базе данных для отслеживания спецификаций:

| specs |
id
spec_name
url
common_spec
notes

В этой таблице около 8000 спецификаций. Есть около 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>

</table>

Запрос 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), а затем разрешить поиск всей таблицы, когда/если в исходном наборе нет спецификации, Надеюсь, это все имеет смысл.

1 ответ

Вы злоупотребляете 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.

licensed under cc by-sa 3.0 with attribution.