使用下面的表作爲示例並將列出的查詢作爲基本查詢,我想添加一種方法來僅選擇具有最大ID的行!無需做第二次查詢!MySQL選擇具有最大ID並匹配其他條件的行
TABLE VEHICLES
id vehicleName
----- --------
1 cool car
2 cool car
3 cool bus
4 cool bus
5 cool bus
6 car
7 truck
8 motorcycle
9 scooter
10 scooter
11 bus
TABLE VEHICLE NAMES
nameId vehicleName
------ -------
1 cool car
2 cool bus
3 car
4 truck
5 motorcycle
6 scooter
7 bus
TABLE VEHICLE ATTRIBUTES
nameId attribute
------ ---------
1 FAST
1 SMALL
1 SHINY
2 BIG
2 SLOW
3 EXPENSIVE
4 SHINY
5 FAST
5 SMALL
6 SHINY
6 SMALL
7 SMALL
而且基本查詢:
select a.*
from vehicle a
join vehicle_names b using(vehicleName)
join vehicle_attribs c using(nameId)
where c.attribute in('SMALL', 'SHINY')
and a.vehicleName like '%coo%'
group
by a.id
having count(distinct c.attribute) = 2;
所以我想實現的是選擇具有某些屬性列,其中ID是匹配的名字,但對於每個匹配名稱只有一個條目最高!
因此,在本例中,工作液將返回以下行:
id vehicleName
----- --------
2 cool car
10 scooter
,如果它是目前使用某種最大的對ID
我得到的所有條目涼車和滑板車。
我的真實世界的數據庫遵循類似的結構,並有數以萬計的條目,所以像上面這樣的查詢可以很容易地返回3000+的結果。我將結果限制爲100行,以便將結果用於搜索我的網站時保持較低的執行時間。我重複同名的「車輛」,但只有一個不同的ID的原因是新車型不斷添加,但我保留那些想要挖掘它們的舊車型!但是,在搜索汽車名稱時,我不想將舊卡僅更換爲ID最高的卡!
正確的答案將適應我上面提供的查詢,我目前正在使用它,並讓它只返回名稱匹配但行號最高的行!
如果這是不可能的,不用大量增加搜索的執行時間,我就可以達到我想要的效果。
你對'(填充NameID,屬性)``上指數vehicle_attribs`?而在使用`LIKE「%酷%」 vehicle_names搜索`不使用任何索引 – ajreal 2010-12-08 12:26:31
@ajreal有在vehicle_attribs上(填充NameID,屬性)主鍵。 – Tristan 2010-12-08 13:40:27