我有一个包含模型年份 from 和模型年份 to 的 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,我需要获得 1990 年生产的所有 Audi 100)。看一下我的 sql 表示例。
似乎您没有提出完整的请求,但您应该能够对此做一些事情:
WHERE
$year >= `from`
AND $year <= coalesce(`to`, 9999)
The coalesce()
如果您没有to
日期,但改为 NULL(仍在生产中)。
这是完整版:(因为我实在受不了mysqli_*
函数,以及它们不太适合/不安全用于此用例 http://www.pontikis.net/blog/dynamically-bind_param-array-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>";
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)