0

私はこの形式のSQLにまったく慣れていません。ですから、これが明白で愚かな質問である場合は、お詫び申し上げます。

基本的に、私は1年以内にウェセックスの王を検索する必要がある簡単なクエリを書いています。1000ADを下回る年を処理できるとは思わないため、年はINTとして格納されます。ともかく。

ユーザーは、関心のある年の範囲(たとえば、793〜794)を入力する必要があります。これは、2つのテキストボックスを含むフォームに入力されます。

Beorhtricは、786年から802年まで統治していた当時、ウェセックスの王でしたが、現在のBETWEEN関数を使用すると、バイキングによってリンディスファーン修道院が焼かれるというイベントのみが復活します。私も返して欲しいのは、ベオルトリッチが現時点でウェセックスの王であるということです。

これまでの私のコードは次のとおりです。

<?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 >= 5不自然な例のように、これはうまくいくと私は信じてい2 <= 4ます。

于 2013-02-14T00:52:30.850 に答える