Ответ
Для выборки записей, где значение столбца меньше определенного, используется оператор сравнения < в условии WHERE.
Базовый SQL-запрос:
SELECT * FROM `products` WHERE `price` < 1000;
-- Выберет все товары с ценой меньше 1000
Примеры с разными типами данных:
- Числа:
WHERE quantity < 5 - Даты:
WHERE created_at < '2024-01-01' - Строки (лексикографическое сравнение):
WHERE name < 'M'(все имена, начинающиеся на A-L)
Реализация в PHP с использованием PDO (рекомендованный способ):
// 1. Установка соединения
$pdo = new PDO('mysql:host=localhost;dbname=my_db;charset=utf8mb4', 'user', 'pass');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 2. Подготовленный запрос с параметром
$maxPrice = 1000;
$sql = "SELECT id, name, price FROM products WHERE price < :max_price AND active = 1";
$stmt = $pdo->prepare($sql);
// 3. Выполнение с привязкой значения
$stmt->execute([':max_price' => $maxPrice]);
// 4. Получение результатов
$cheapProducts = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($cheapProducts as $product) {
echo $product['name'] . ': ' . $product['price'] . "n";
}
Ключевые моменты для оптимизации:
- Используйте подготовленные выражения (
prepare/execute). Это защищает от SQL-инъекций и позволяет СУБД кэшировать план запроса. - Добавьте индекс на столбец, используемый в условии
WHERE. Для примера выше индексINDEX(price)илиINDEX(price, active)значительно ускорит выборку.ALTER TABLE `products` ADD INDEX `idx_price_active` (`price`, `active`); - Ограничивайте выборку. Если таблица большая, используйте
LIMITили пагинацию.SELECT * FROM `products` WHERE `price` < 1000 LIMIT 20;