最简单的解释是您的表中只有一个“年份”列。(我们可能错误地暗示(从您的问题中对“year_1”和“year_2”的引用)您的表有两个您想要检查的单独的“year”列。)
如果您只检查一个“年份”列,那么这是非常简单的查询:
SELECT p.*
FROM persons p
WHERE p.year >= $year_1 AND p.year <= $year_2
但是您的问题似乎引用了两个单独的列:year_1 和 year_2,以及您的两个变量 $year_1 和 $year_2。
因此,规范的另一种可能解释是 year_1 和 year_2 列是连续范围的下限和上限,并且您希望找到满足整个给定年份范围的行。
例如,year_1 可能是“出生年份”,而 year_2 可能是“死亡年份”,我想从给定范围内每年“活着”的 people 表中查找所有行:
SELECT p.*
FROM persons p
WHERE p.year_1 <= $year_1
AND p.year_2 >= $year_2
(我认为这不是您要问的,但我不确定。)
另一种可能的解释是,我想在给定范围内的任何(但不一定是所有)年份中找到“活着”的任何人。我会通过如下查询得到:
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
但同样,您的问题并不清楚您实际上想要返回哪些结果集(如果有的话)。