2013-02-05 44 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。谢谢迈克尔!