2013-02-05 47 views
0

我已經爲所有攜帶的零件創建了所有車輛,製造和引擎的單個MySQL表。我正在嘗試使用PHP進行級聯下拉搜索功能。我的腳本在第二個查詢上失敗;使用GROUP BY從MySQL進行查詢不起作用

SELECT model FROM veh_types WHERE make = $vehmakeA GROUP BY model 

我猜測它在GROUP BY子句上失敗。

有人能指出我正確的方向嗎?

謝謝!編輯------------- 這是我的更多代碼。

echo "<p>VEHICLE MAKE"; 
    echo "<select name=\"vehmake\" id=\"vehmake\" onchange=\"this.form.submit();\">"; 
    echo "<option value=\"--\">SELECT VEHICLE MAKE...</option>"; 
    echo "<option value=\"--\">SELECT VEHICLE MAKE 2...</option>"; 

    $queryModel = "SELECT make, model FROM veh_types WHERE make = $vehmakeA GROUP BY model"; 
    $resultModel = mysql_query($queryModel) or die(mysql_error()); 
    while($rowModel = mysql_fetch_array($resultModel)) { 
     $vehmodel = $rowModel['model']; 
     echo "<option value=\"$vehmodel\">$vehmodel</option>\n";  
    } 

    echo "</select></p>"; 
+0

什麼是錯誤? – Cfreak

+0

'mysql_error()'告訴你什麼?我猜這不是在'GROUP BY'上失敗,而是在一個沒有引號的字符串值'$ vehmakeA'。 –

+1

'GROUP BY'可能不會做你期望的,但你沒有聚合(SUM (),COUNT(),AVG(),MIN(),MAX()等等)也許你的意思是'SELECT DISTINCT model ...' –

回答

1

GROUP BY語句與聚合函數結合使用,以按一個或多個列對結果集進行分組。

SELECT列名,的aggregate_function(列)FROM TABLE_NAME WHERE列名操作者值GROUP BY列名

骨料(GROUP BY)功能

Name Description 

AVG() Return the average value of the argument 
BIT_AND() Return bitwise and 
BIT_OR() Return bitwise or 
BIT_XOR() Return bitwise xor 
COUNT(DISTINCT) Return the count of a number of different values 
COUNT() Return a count of the number of rows returned 
GROUP_CONCAT() Return a concatenated string 
MAX() Return the maximum value 
MIN() Return the minimum value 
STD() Return the population standard deviation 
STDDEV_POP() Return the population standard deviation 
STDDEV_SAMP() Return the sample standard deviation 
STDDEV() Return the population standard deviation 
SUM() Return the sum 
VAR_POP() Return the population standard variance 
VAR_SAMP() Return the sample variance 
VARIANCE() Return the population standard variance 

REF:link

0

我剛把wha放在一起我認爲你的表格看起來像,並且這個查詢適用於我:

CREATE TABLE IF NOT EXISTS `veh_types` (
     `id` int(10) NOT NULL auto_increment, 
     `make` varchar(100) default '0', 
     `model` varchar(100) default '0', 
     `submodel` varchar(100) default '0', 
     `type` varchar(100) default '0', 
     UNIQUE KEY `id` (`id`) 
    ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; 

    INSERT INTO `veh_types` VALUES (1, 'Ford', 'Ranger', 'EX', 'Truck'); 
    INSERT INTO `veh_types` VALUES (2, 'Ford', 'Focus', 'EX', 'Car'); 
    INSERT INTO `veh_types` VALUES (3, 'Honda', 'Civic', 'EX', 'Car'); 
    INSERT INTO `veh_types` VALUES (4, 'Honda', 'Accord', 'LX', 'Car'); 
    INSERT INTO `veh_types` VALUES (5, 'Chevy', 'S10', 'LS', 'Truck'); 

    SELECT model 
    FROM veh_types 
    WHERE make = 'Ford' 
    GROUP BY model; 
0

答案的組合解決了我的問題。我將它從GROUP BY更改爲DISTINCT,並在我的變量周圍添加了一些單引號,它可以工作!感謝大家的幫助!回顧一下,這兩個答案都來自Michael Berkowski。謝謝邁克爾!