最も簡単な説明は、テーブルに「年」列が 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
しかし、繰り返しますが、あなたの質問からは、実際に返したい結果セット (もしあれば) が明確ではありません。