mySQL年份之间的值范围

时间:2013-02-13 23:33:01

标签: mysql range between

我对这种形式的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);
?>

非常感谢你。

亚历

1 个答案:

答案 0 :(得分:0)

你可能在这里错过了正确的逻辑,因为它可以像你期望的那样工作。这是范围的典型问题,因为它们可能远远不够直观。

例如,如果事件A跨越时间t = 2到t = 6并且您想知道在t = 4和t = 5之间发生了什么事件,除非得到正确的范围,否则您将找不到A.

正确的查询应该是:

SELECT ... WHERE date_s <= :searchd AND date_e >= :searchs

这假设:searchd是您的范围的结尾,:searchs是开始。在长格式中,这意味着“在范围结束之前查找事件开始的所有事件,并在范围开始之后结束。”我相信这会起作用,就像人为的例子6 >= 52 <= 4一样,这样事件才有资格。