0

实际上我希望用户选择两年,然后我想从 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”和“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

但同样,您的问题并不清楚您实际上想要返回哪些结果集(如果有的话)。

于 2012-07-14T04:21:50.343 回答
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 回答