2013-04-23 87 views
2

我有一個MySQL表結構如下優化SQL查詢通過分組

+-------------+------------------+------+-----+---------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
+-------------+------------------+------+-----+---------+----------------+ 
| id   | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| make  | varchar(55)  | NO | MUL | NULL |    | 
| model  | varchar(55)  | NO | MUL | NULL |    | 
| year  | varchar(4)  | NO | MUL | NULL |    | 
+-------------+------------------+------+-----+---------+----------------+ 

和一些示例數據

('Chevrolet', 'Express', '2001'), 
('Chevrolet', 'Express', '2002'), 
('Chevrolet', 'Venture', '2001'), 
('Chevrolet', 'Venture', '2002'), 
('Dodge', 'Dakota', '2000'), 
('Dodge', 'Dakota', '2001'), 
('Ford', 'Flex', '2009'), 
('Ford', 'Flex', '2010'), 

我想要的是能返回我所有的車型之一的快速查詢,所有的製造和附加年份。所以下面是我想返回的一個例子。

Array 
(
    [Chevrolet] => Array 
     (
      [Express] => Array 
       (
        [0] => 2001 
        [1] => 2002 
       ) 

      [Venture] => Array 
       (
        [0] => 2001 
        [1] => 2002 
       ) 
     ) 

    [Dodge] => Array 
     (
      [Dakota] => Array 
       (
        [0] => 2001 
        [1] => 2002 
       ) 
     ) 

    [Ford] => Array 
     (
      [Flex] => Array 
       (
        [0] => 2009 
        [1] => 2010 
       ) 
     ) 
) 

什麼我目前做的:

我有一個查詢返回的所有獨特的品牌:

$sql = "select distinct make from listings order by make asc "; 

,一旦我每天做,我遍歷並運行以下查詢,使用make:

$sql = "select distinct model from listings where make = ? order by model asc "; 

我走o NE更一步搶到年:

$sql = "select distinct year from listings where make=? and model=? order by year desc"; 
+0

分享我們的解釋查詢的計劃,並在表的索引... – 2013-04-23 05:56:53

+0

@SashiKant我目前還沒有表上的所有索引,解釋輸出與描述相同 – 2013-04-23 06:01:30

回答

0
SELECT make, model, year 
FROM listings 
ORDER BY make, model, year