我有一个数据库,其中包含一些已售出的房产。他们每个人都有一个与之相关的日期,这是我需要用来缩小搜索结果的日期。
基本上我有一个查询:
$query = "SELECT * from newsales WHERE city = '".$_GET['location']."'";
而我需要做的是,从上述查询返回的结果中,我需要将其进一步缩小到过去 90 天内。
所以它会找到城市,然后只需要获取过去 90 天的城市。如何组合 SELECT 语句来缩小结果范围?
谢谢!
您可以使用 SQLAND
运算符。
文档:http ://dev.mysql.com/doc/refman/5.1/en/logical-operators.html
您的查询将是:
$query = "SELECT * from newsales WHERE city = '".$_GET['location']."' AND date > '".$oldestdate."';
设置$date
为旧日期,在您的情况下为今天前 90 天。根据您在 mysql 数据库中的日期格式,您必须在时间戳或日期时间中计算它。
您不需要组合语句,只需使用布尔运算符SELECT
创建一个更复杂的子句:WHERE
AND
$query = "
SELECT *
FROM newsales
WHERE
city = '".$_GET['location']."'
AND date > '".$oldestdate."'
";
我建议您也阅读 SQL 注入- 如果您$_GET
直接这样使用,有人可以访问您的网站并基本上输入他们想要的任何 SQL 语句。
最简单的方法,假设您正在使用mysqli_*
函数(已替换mysql_*
函数但大部分可以互换使用)是mysqli_real_escape_string()
,例如city = '" . mysqli_real_escape_string($_GET['location']) . "'
.
组合多个 SELECT 语句的结果意味着您需要使用 UNION。请看这个:http ://dev.mysql.com/doc/refman/5.0/en/union.html
(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);