Mysql 年与年之间的值范围

Mysql 年与年之间的值范围,mysql,range,between,Mysql,Range,Between,我对这种形式的SQL非常陌生。因此,如果这是一个明显/愚蠢的问题,我道歉 基本上,我正在写一个简单的查询,应该在一年内查找威塞克斯国王。年份存储为INT,因为我认为它无法处理低于1000AD的年份。无论如何 用户应输入他们感兴趣的年份范围,例如793-794。这是在带有两个文本框的表单中输入的 在公元786年至公元802年期间,贝奥赫特里克将成为威塞克斯的国王,但使用的是当前的中间功能,这只会让人们想起林迪斯法恩修道院被维京人纵火的事件。我还想回报的是,贝奥赫特里克此时是威塞克斯的国王 以下是我

我对这种形式的SQL非常陌生。因此,如果这是一个明显/愚蠢的问题,我道歉

基本上,我正在写一个简单的查询,应该在一年内查找威塞克斯国王。年份存储为INT,因为我认为它无法处理低于1000AD的年份。无论如何

用户应输入他们感兴趣的年份范围,例如793-794。这是在带有两个文本框的表单中输入的

在公元786年至公元802年期间,贝奥赫特里克将成为威塞克斯的国王,但使用的是当前的中间功能,这只会让人们想起林迪斯法恩修道院被维京人纵火的事件。我还想回报的是,贝奥赫特里克此时是威塞克斯的国王

以下是我迄今为止的代码:

<?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);
?>

事先非常感谢


Alex

您可能缺少正确的逻辑,无法按预期工作。这是范围的一个典型问题,因为它们可能远不如直观

例如,如果事件A的时间跨度为t=2到t=6,并且您想知道t=4到t=5之间发生了什么事件,那么除非您确定了正确的范围,否则您将无法找到A

正确的查询应该是:

SELECT ... WHERE date_s <= :searchd AND date_e >= :searchs
选择。。。其中date_s=:搜索

这假定
:searchd
是范围的结束,而
:searchs
是范围的开始。在长格式中,这意味着“查找事件在范围结束之前开始,在范围开始之后结束的所有事件”。我相信这会起作用,就像在人为的示例中,
6>=5
2您不应该在新应用程序中使用
mysql\u query
。这个接口是过时的、危险的,将在PHP的未来版本中删除。为了使您的代码经得起未来的考验,您应该使用以下内容。虽然在每个变量上调用
mysql\u real\u escape\u string
是件好事,但使用它要容易得多。