Php MySQL。列出范围之间的年份

Php MySQL。列出范围之间的年份,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,我做了一些研究,发现这个问题与我想要的正好相反,我希望他们能为汽车创造一个完整的年份列表 就我而言,我想列出年份,但我的年份在范围内 更新信息 质疑 我并没有把表之间的关系,以减少空间和具体 为简单起见,我的数据仅包含两行: |制造|模型|开始|结束|电机| |雪佛兰|骑士| 2002 | 2005 | 4 Cil 2.2 Lts| |福特|探险家| 1995 | 1996 | 6 Cil 3.3 Lts| 我想得到如下的MySQL查询 |雪佛兰|骑士| 2002 | 4 Cil 2.2 Lt

我做了一些研究,发现这个问题与我想要的正好相反,我希望他们能为汽车创造一个完整的年份列表

就我而言,我想列出年份,但我的年份在范围内

更新信息

质疑

我并没有把表之间的关系,以减少空间和具体

为简单起见,我的数据仅包含两行:

|制造|模型|开始|结束|电机|

|雪佛兰|骑士| 2002 | 2005 | 4 Cil 2.2 Lts|

|福特|探险家| 1995 | 1996 | 6 Cil 3.3 Lts|

我想得到如下的MySQL查询

|雪佛兰|骑士| 2002 | 4 Cil 2.2 Lts|

|雪佛兰|骑士| 2003 | 4 Cil 2.2 Lts|

|雪佛兰|骑士| 2004 | 4 Cil 2.2 Lts|

|雪佛兰|骑士| 2005 | 4 Cil 2.2 Lts|

|福特|探险家| 1995 | 6 Cil 3.3 Lts|

|福特|探险家| 1996 | 6 Cil 3.3 Lts|

我已经尝试了几个MySQL查询,涉及CASE、MIN、MAX,但这些都没有给我想要的结果。 我认为答案使用子查询,所以我将继续尝试


提前谢谢

您可以尝试此查询

   SELECT make,model,begin_year + years.incYears as year,motor
FROM
 (SELECT (y1.value + y2.value + y3.value + y4.value + y5.value) as incYears
  FROM
  (SELECT 0 as value UNION SELECT 1)y1,
  (SELECT 0 as value UNION SELECT 2)y2,
  (SELECT 0 as value UNION SELECT 4)y3,
  (SELECT 0 as value UNION SELECT 8)y4,
  (SELECT 0 as value UNION SELECT 16)y5
  )years
CROSS JOIN general_information
WHERE begin_year+years.incYears <= end_year
ORDER BY make,year

如果您真的必须在SQL层中解决这个问题,并且您不能更改您的常规信息表模式来规范年度数据,那么我的建议是引入一个新的年度列表表,您可以根据它进行联接。这张表非常简单:

year_value
1900
1901
1902
...
2020
显然,你会使用一系列适合你的年数

然后针对该表进行联接:

SELECT
  gi.make AS make,
  gi.model AS model,
  y.year_value AS model_year,
  gi.motor AS motor
FROM general_information AS gi
INNER JOIN year_list AS y ON y.year_value BETWEEN gi.begin_year AND gi.end_year
ORDER BY make ASC, model ASC, model_year ASC, motor ASC
也就是说,我认为您最好将年份数据从主表中删除,并将其放入一个单独的表中进行合并。这将产生如下结构:

general_information
-------------------
id <=  create a new autoincrementing primary key field
make
model
motor

那个数据是表行吗?或者一个条目?发布您尝试过的查询。数据显示问题通常最好在表示层/应用程序级代码中处理,假设您已经准备好信息已经更新。让我发布我的备选查询Mike you’s solution帮了我很多忙…我找到了我想要的,谢谢您的帮助!!我尝试了一下,但很难将其集成到我的查询中…感谢您的演示和帮助
general_information
-------------------
id <=  create a new autoincrementing primary key field
make
model
motor
general_information_to_years
----------------------------
gi_id <= foreign key to id field in general_information table
year_value
SELECT
  gi.make AS make,
  gi.model AS model,
  giy.year_value AS model_year,
  gi.motor AS motor
FROM general_information AS gi
INNER JOIN general_information_to_years AS giy ON gi.id = giy.gi_id
ORDER BY make ASC, model ASC, model_year ASC, motor ASC