Это правильный способ сделать запрос MySQL - PullRequest
1 голос
/ 08 сентября 2011

У меня есть окно поиска для каждого статуса элемента!

Когда я ищу, это правильный способ сделать это?

SELECT *
FROM (`site_pages`)
WHERE  `title`  LIKE '%php%'
OR  `content`  LIKE '%php%'
HAVING `status` != 'deleted'
AND `status` != 'concept'

Когда поиск не зафиксирован, я простоиспользуйте

... WHERE'status' != 'deleted' AND 'status' != 'concept'

Ответы [ 2 ]

4 голосов
/ 08 сентября 2011

Несколько возможностей для улучшения:

  • Нет смысла использовать having, вам просто нужно добавить дополнительные where условия.

  • Вы можете создать таблицу statuses, назначив числовые представления для удаленных / концептуальных значений, что позволит вам легко изменить имя статуса, добавить / перечислить все существующие статусы.Это уменьшает накладные расходы на хранение множества избыточных текстовых полей и значительно повышает скорость сравнения с полем состояния, причем числовые сравнения намного быстрее, чем сравнения строк.

  • Вы также можете захотеть сделатьстатус «удален» в столбце каждой записи.В сущности, запись может быть концепцией или удалением, но не удаленной концепцией.Что если вы хотите восстановить запись?Вы потеряли статус предварительного удаления.Вот как обычно выполняется неразрушающее удаление записей;либо путем активации deleted бита, либо путем деактивации active бита.

В противном случае это выглядит как довольно стандартный SQL.

2 голосов
/ 08 сентября 2011

HAVING используется для совокупных запросов (то есть запросов, которые используют GROUP BY).Ваши последние два условия должны быть объединены в ваш блок WHERE.Кроме того, я не думаю, что вам нужны круглые скобки вокруг имени таблицы.

Вы обнаружите, что по мере роста данных использование LIKE может не очень хорошо работать, но в этом нет ничего синтетического неправильнокак ты это используешь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...