Php 针对所需条件筛选表中的数据

Php 针对所需条件筛选表中的数据,php,mysql,stored-procedures,Php,Mysql,Stored Procedures,不要为标题操心,我想不透确切的问题。请在下面找到我的问题 我试图以这样的方式过滤数据,结果集不应该包含给定年份对应的品牌和型号。例如,如果我给出2014,结果集不应该包含“Acura-ILX和BMW-X5”。它应该返回剩余的品牌和型号 以下是表格结构 Id | Make | Model | Year --------------------------------- 1 | Acura | ILX | 2012 2 | Acura | ILX

不要为标题操心,我想不透确切的问题。请在下面找到我的问题

我试图以这样的方式过滤数据,结果集不应该包含给定年份对应的品牌和型号。例如,如果我给出2014,结果集不应该包含“Acura-ILX和BMW-X5”。它应该返回剩余的品牌和型号

以下是表格结构

Id  | Make    | Model     | Year
---------------------------------
1   | Acura   | ILX       | 2012
2   | Acura   | ILX       | 2013
3   | Acura   | ILX       | 2014
4   | Acura   | ILX       | 2015
5   | Acura   | RL        | 2012
6   | Acura   | RL        | 2013
7   | Acura   | RL        | 2015
8   | BMW     | X5        | 2012
9   | BMW     | X5        | 2013
10  | BMW     | X5        | 2014
11  | BMW     | Q7        | 2011
12  | BMW     | Q7        | 2012
13  | BMW     | Q7        | 2013
14  | BMW     | Q7        | 2015
给出2014年的预期结果

Id  | Make    | Model     | Year
---------------------------------    
5   | Acura   | RL        | 2012
6   | Acura   | RL        | 2013
7   | Acura   | RL        | 2015   
11  | BMW     | Q7        | 2011
12  | BMW     | Q7        | 2012
13  | BMW     | Q7        | 2013
14  | BMW     | Q7        | 2015

这里拉小提琴:

我的同事帮我找出了对上述场景的快速反应。问题是

select make,model,group_concat(year ORDER BY year ASC) as yearList from apd_cars 
group by model,make 
having yearList NOT like '%2014%' 
order by make,model;

谢谢你的回答。我试过这个答案。但执行起来要花很多时间。返回418条记录花费了将近1分钟30秒。我的表包含5429条记录,存储引擎是MyISAM。记录数将在一段时间内增加。我们还可以有其他快速查询吗?我在最后尝试了按make分组,model(主查询不在子查询中),这将计数减少到24,但仍然需要1分钟24秒。我不知道这一性能背后的原因,但我目前在mysql中占30%,所以你的同事可能是对的!)
select make,model,group_concat(year ORDER BY year ASC) as yearList from apd_cars 
group by model,make 
having yearList NOT like '%2014%' 
order by make,model;