Иногда phpMyAdmin генерирует запросы, например:
SELECT *
FROM `items`
WHERE 1
LIMIT 0 , 30
Интересно, имеет ли значение WHERE 1
значение в таком запросе.
Иногда phpMyAdmin генерирует запросы, например:
SELECT *
FROM `items`
WHERE 1
LIMIT 0 , 30
Интересно, имеет ли значение WHERE 1
значение в таком запросе.
Это не так. Это означает ALWAYS TRUE
, поэтому он не будет иметь никакого фильтрационного воздействия на ваш запрос. Планировщик запросов, вероятно, проигнорирует это предложение.
Обычно он используется, когда вы создаете запрос на стороне клиента путем конкатенации условий фильтрации.
Итак, если ваш базовый запрос хранится в такой строке (пример находится в PHP, но это, безусловно, относится ко многим другим языкам):
$sql = "select * from foo where 1 ";
Затем вы можете просто конкатенировать множество условий фильтрации с помощью предложения AND
независимо от того, что это первое условие, которое вы используете или нет:
// pseudo php follows...
if ($filter_by_name) {
$sql = $sql . " and name = ? ";
}
if ($filter_by_number) {
$sql = $sql . " and number = ? ";
}
// so on, and so forth.
WHERE 1
является синонимом "истина" или "все".
Это ярлык, поэтому им не нужно удалять предложение where из сгенерированного SQL.
В противном случае вы должны написать что-то вроде этого:
$sql = "SELECT * FROM `errors`";
if ($hasWhereClause == true) {
$sql .= " WHERE $whereClause";
}
$sql .= "LIMIT 0 , 30";
Я бы предположил, что артефакт строковой конкатенации: если нет, где указаны условия, выводится "1". Таким образом, не нужно решать, должно ли выводиться ключевое слово WHERE или нет.
Также вы всегда можете выводить его и просто конкатенировать условия с помощью "И" и "ИЛИ". Вам не нужно решать, что первое условие не должно начинаться с ключевого слова AND и OR.