Php MySQL。列出范围之间的年份
我做了一些研究,发现这个问题与我想要的正好相反,我希望他们能为汽车创造一个完整的年份列表 就我而言,我想列出年份,但我的年份在范围内 更新信息 质疑 我并没有把表之间的关系,以减少空间和具体 为简单起见,我的数据仅包含两行: |制造|模型|开始|结束|电机| |雪佛兰|骑士| 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,但这些都没有给我想要的结果。 我认为答案使用子查询,所以我将继续尝试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
提前谢谢 您可以尝试此查询
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