0

我对这种形式的 SQL 很陌生。因此,如果这是一个明显/愚蠢的问题,我深表歉意。

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

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

Beorhtric 在 786 年至 802 年期间将成为威塞克斯国王,但使用当前的 BETWEEN 函数只会带回林迪斯法恩修道院被维京人焚烧的事件。我还想要返回的是,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);
?>

非常感谢您提前。

亚历克斯

4

1 回答 1

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

于 2013-02-14T00:52:30.850 回答