У меня есть таблица SQL с модельным годом от и модельным годом, в фильтре мне нужно выбрать только один год с параметрами, и я хочу получить все модели, которые в этом году отстают.
<?php $make= $_POST['make']; $model= $_POST['model']; $from= $_POST['year']; if(!empty($make)){$mysql="and `make`='$make'";} if(!empty($model)){$mysql.=" and `model`='$model'";} if(!empty($from)){$mysql.=" and `from`='$from'";} $spec=$mysqli->query("SELECT * FROM `cars` WHERE (from <= to AND to>= from) AND id!='' $mysql "); while($r = $spec->fetch_object()){ echo "$r->id $r->make $r->model $r->from"; echo"</br>"; ?>
С помощью этого кода я могу получить только год. Как получить все модели с годами, включая и из? (например: если я выбираю Audi 100 1990, мне нужно получить всю Audi 100, которые были сделаны в 1990 году). Взгляните на мой пример таблицы sql.
Похоже, что вы не поставили полный запрос, но вы должны что-то сделать с этим:
WHERE $year >= `from` AND $year <= coalesce(`to`, 9999)
coalesce()
здесь, если у вас нет даты, но вместо NULL (все еще на производстве).
Вот полная версия: (Поскольку я действительно не могу mysqli_*
функцию mysqli_*
, и они не очень подходят / безопасны для этого случая использования , это решение PDO)
<?php // DB connect try { $db = new PDO('mysql:host=localhost;dbname=DB_name', 'username', 'password'); // output as object $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); // error SQL as object $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db->exec("SET CHARACTER SET utf8"); } catch (Exception $e) { echo '<strong>'.$e->getMessage().'</strong><br />'."\n"; } // default parameters $param = array(); $sql = "SELECT * FROM `cars` WHERE `id` != '' "; if(!empty($_POST['make'])){ $param[':make'] = $_POST['make']; $sql .= 'AND `make` = :make '; } if(!empty($_POST['model'])){ $param[':model'] = $_POST['model']; $sql .= 'AND `model` = :model '; } if(!empty($_POST['from'])){ $param[':from'] = $_POST['from']; $sql .= 'AND :from >= coalesce(`from`, 0) AND :from <= coalesce(`to`, 9999) '; } // we prepare our request $stmt = $db->prepare($sql); // we execute with our parameters $stmt->execute($param); while($r = $stmt->fetch()){ echo $r->id.' - '.$r->make.' - '.$r->model.' - '.$r->from; echo"</br>"; }