0

実際には、ユーザーに 2 年を選択してもらい、選択した年の間にある mysql データベースから行をフェッチしたいと考えています。たとえば、ユーザーが year_1= 2006 および year_2= 2009 を選択すると、2006 年から 2009 年までのすべてのレコードを表示したいと考えています。

$year_1='2006';
$year_2='2009';    
$sql= "Select names FROM persons WHERE year_1 >= $year_1 and year_1 <= $year_2;

このクエリは、$year_1 と $year_2 (2006 年と 2009 年) の名前のみを選択していますが、2007 年と 2008 年のものは選択していません。2007 年と 2008 年の名前も選択したいと思います。このコードを変更する方法を教えてください。

4

4 に答える 4

1

次のようなものが必要です。

$sql= "SELECT *
  FROM names
  WHERE year_1 BETWEEN $year_1 AND $year_2";
于 2012-07-14T03:45:54.030 に答える
0
SELECT *
  FROM names
 WHERE (year_1 BETWEEN $year_1 AND $year_2) AND
       (year_2 BETWEEN $year_1 AND $year_2)

これがフィルター処理の方法であると仮定すると、$ year_1=2006および$year_2= 2009とすると、フィルターは次のようになります。

-- 2006 <-----y1-------------------------y2--> 2009     >> Row returned
-- 2006/y1 <---------------------------------> 2009/y2  >> Row returned
-- <----y1-------2006-------------------y2---> 2009     >> Row filtered out
-- 2006 <---------------y1------2009-----y2-->          >> Row filtered out
-- <-----y1-----------y2------2006-----2009-->          >> Row filtered out
-- <--2006-----2009--------y1-----------y2--->          >> Row filtered out

したがって、toの範囲が入力または入力年ある場合にのみ、行が返されます。year_1year_2

于 2012-07-14T03:53:05.880 に答える
0

試す

$year_1 = '2006';
$year_2 = '2009';
$sql = "SELECT names FROM persons WHERE year_1 >= $year_1 AND year_2 <= $year_2";
于 2012-07-14T04:24:48.323 に答える
0

最も簡単な説明は、テーブルに「年」列が 1 つしかないということです。((質問の「year_1」と「year_2」への参照から) 確認したい 2 つの別個の「年」列がテーブルにあると誤って暗示している可能性があります。)

チェックする「年」列が1つしかない場合、それは非常に単純なクエリです。

SELECT p.*
  FROM persons p
 WHERE p.year >= $year_1 AND p.year <= $year_2 

しかし、あなたの質問は、2 つの変数 $year_1 と $year_2 に加えて、2 つの別々の列 year_1 と year_2 を参照しているようです。

したがって、仕様の別の解釈として、 year_1 列と year_2 列が連続範囲の下限と上限であり、指定された年の範囲全体を満たす行を見つけたいというものがあります。

例として、 year_1 は「誕生年」で、 year_2 は「死亡年」である可能性があり、特定の範囲で毎年「生きていた」人テーブルからすべての行を検索したいと考えています。

SELECT p.*
  FROM persons p
 WHERE p.year_1 <= $year_1 
   AND p.year_2 >= $year_2

(これはあなたが求めているものではないと思いますが、よくわかりません。)

もう 1 つの考えられる解釈は、特定の範囲内で任意の (必ずしもすべてではない) 年間「生きていた」人を見つけたいというものです。次のようなクエリでそれを取得します。

 SELECT p.*
   FROM persons p
  WHERE p.year_1 <= $year_2
     OR p.year_2 >= $year_1

または、特定の範囲の年のイベント年を探して、根本的に異なる質問をしている可能性があります。

特定の年の範囲で「生まれた」または「亡くなった」人を見つけたいなど...

  SELECT p.*
    FROM persons p
   WHERE p.year_1 >= $year_1 AND p.year_1 <= $year_2
      OR p.year_2 >= $year_1 AND p.year_2 <= $year_2

しかし、繰り返しますが、あなたの質問からは、実際に返したい結果セット (もしあれば) が明確ではありません。

于 2012-07-14T04:21:50.343 に答える