我有一些代码,选择两个日期之间的数据库中的所有条目,但我也希望它不选择任何与"状态"列中的"已删除"。我可以让它做其中之一,但不能同时做这两件事。
try {
$DBH = new PDO("mysql:host=localhost;dbname=$dbname",$dbuser,$dbpass);
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$STH = $DBH->prepare("SELECT Link, Type, Location, Urgency, Date, Time, Status, Days FROM reports WHERE truedate BETWEEN :start_date AND :end_date");
$STH->execute(array(':start_date' => $start_date_variable, ':end_date' => $end_date_variable));
$rows = $STH->fetchAll(PDO::FETCH_ASSOC);
echo "<table>";
foreach ($rows as $row) {
echo "<tr><td>" . $row['Link'] . "</td><td>" . $row['Type'] . "</td><td>" . $row['Location'] . "</td><td>" . $row['Urgency'] . "</td><td>" . $row['Date'] . "</td><td>" . $row['Time'] . "</td><td>" . $row['Status'] . "</td><td>" . $row['Days'] . "</td></tr>";
}
echo "</table>";
}catch(PDOException $e) {
echo $e->getMessage();
}
那么我如何使用两个where语句来缩小结果范围呢?
在truedate
检查之前使用AND
操作符,如图所示。
SELECT Link, Type, Location, Urgency, Date, Time, Status, Days FROM reports WHERE Status NOT LIKE '%Removed%' AND truedate BETWEEN :start_date AND :end_date
尝试使用以下
更新您的代码$STH = $DBH->prepare("SELECT Link, Type, Location, Urgency, Date, Time, Status, Days FROM reports WHERE Status != :statusval AND truedate BETWEEN :start_date AND :end_date");
$STH->execute(array(':statusval ' => 'Removed', ':start_date' => $start_date_variable, ':end_date' => $end_date_variable));