我对这种形式的SQL很新。如果这是一个明显/愚蠢的问题,我很抱歉。
基本上我正在编写一个简单的查询,该查询应该在一年范围内查找威塞克斯国王。这些年份存储为INT,因为我认为它不能处理低于1000AD的年份。反正。
用户应输入他们感兴趣的年份范围,例如793 - 794.这是在带有两个文本框的表单中输入的。
Beorhtric将在786年到802年之间成为威塞克斯的国王,但使用目前的BETWEEN功能只能带回Lindisfarne Abbey被维京人焚烧的事件。我还想要的是Beorhtric此时是威塞克斯的国王。
到目前为止,这是我的代码:
<?php
$con = mysql_connect("");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("magorumc_authentibase", $con);
$result = mysql_query("SELECT * FROM exportinfomod
WHERE date_s BETWEEN ".mysql_real_escape_string($_GET['searchs'])."
AND ".mysql_real_escape_string($_GET['searchd'])."
ORDER BY date_s ASC");
echo "<b>Output Display in Table formate and php formate</b><br>";
echo "<table border='1'>
<tr>
<th>Start Date</th>
<th>End Date</th>
<th>Title</th>
<th>Text</th>
</tr>";
while ($row = mysql_fetch_array($result)) {
echo "<tr>";
echo "<td>" . $row['date_s'] . "</td>";
echo "<td>" . $row['date_e'] . "</td>";
echo "<td>" . $row['title'] . "</td>";
echo "<td>" . $row['text'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysql_close($con);
?>
非常感谢你。
亚历
答案 0 :(得分:0)
你可能在这里错过了正确的逻辑,因为它可以像你期望的那样工作。这是范围的典型问题,因为它们可能远远不够直观。
例如,如果事件A跨越时间t = 2到t = 6并且您想知道在t = 4和t = 5之间发生了什么事件,除非得到正确的范围,否则您将找不到A.
正确的查询应该是:
SELECT ... WHERE date_s <= :searchd AND date_e >= :searchs
这假设:searchd
是您的范围的结尾,:searchs
是开始。在长格式中,这意味着“在范围结束之前查找事件开始的所有事件,并在范围开始之后结束。”我相信这会起作用,就像人为的例子6 >= 5
和2 <= 4
一样,这样事件才有资格。