2013-10-29 113 views
0

我有一些SQL代码:动态sql查询PHP和

$id = "2000"; 
    $model = $_GET["model"] 

    $result = mysql_query("SELECT 
    Left(Right(Base.inputs.Data_inf,4),3) As 'Datas', 
    count(Base.Data.Data_ID) As `U_Count` 
    FROM 
     Base.Data 
    WHERE 
     Product = '$id' 
     AND model in ('a','b','c') 
    GROUP BY "); 

我想提出和查询的一部分,是动态的。事情是这样的:

$m= $model; 
switch ($m) 
{ 
    case "basic": 
     $m = "AND model in ('a','b','c')"; 
     break; 

    case "upgrade": 
     $m = "AND model in ('d','e','f')"; 
     break; 

    default: 
     $m = "AND model in ('a','b','c')"; 
} 

我把$ M查询和它不工作:

WHERE 
     Product = '$id' 
     '$m' 

任何建议将不胜感激。

回答

1

删除大约$ m的报价。此外,添加空格和替换和正确的条件:

$m= $model; 
switch ($m) 
{ 
    case "basic": 
     $m = " AND model in ('a','b','c') "; 
     break; 

    case "upgrade": 
     $m = " AND model in ('d','e','f') "; 
     break; 

    default: 
     $m = " AND model in ('a','b','c') "; 
} 

然后执行:

$result = mysql_query("SELECT 
Left(Right(Base.inputs.Data_inf,4),3) As 'Datas', 
count(Base.Data.Data_ID) As `U_Count` 
FROM 
    Base.Data 
WHERE 
    Product = '$id' 
    $m "); 
+0

它的工作:d thnks很多 –

+0

欢迎您:)但你确实应该用正确的条件下更换和选择这些变种,否则将无法正常工作,因为一个字段不能同时等于所有这些值。去编辑我的答案以反映这一点。 – Ashalynd

+0

你说得对,我会编辑我的问题。 –

2

,您应该使用OR操盘AND,或者最好使用IN声明。 因为我猜模型不能在同一时间等于ab,这是不可能的 所以,你的代码的一部分应该是这样的:

$m = " AND model in ('a','b','c')"; 

编辑: 您可以简化代码的东西像这样:

$id = "2000"; 
$model = $_GET["model"] 



$m= $model; 
switch ($m) 
{ 
    case "upgrade": 
    $mIN = "'d','e','c'"; 
     break; 

    case "basic": 
    default: 
    $mIN = "'a','b','c'"; 
     break; 
} 


$result = mysql_query("SELECT 
Left(Right(Base.inputs.Data_inf,4),3) As 'Datas', 
count(Base.Data.Data_ID) As `U_Count` 
FROM 
    Base.Data 
WHERE 
    Product = '$id' 
    AND model in ($mIn) 
GROUP BY "); 
0

您还可以在传递它之前创建SQL作为字符串。如果在运行之前还可以更轻松地调试查询。

$querytop = "SELECT 
     Left(Right(Base.inputs.Data_inf,4),3) As 'Datas', 
     count(Base.Data.Data_ID) As `U_Count` 
     FROM 
      Base.Data 
     WHERE 
      Product = '$id'"; 

    $m= $model; 
    switch ($m) 
    { 
     case "basic": 
      $m = " AND model = 'a' 
     AND model = 'b' 
     AND model = 'c' "; 
      break; 

     case "upgrade": 
      $m = " AND model = 'd' 
     AND model = 'e' 
     AND model = 'f' "; 
      break; 

     default: 
      $m = " AND model = 'a' 
     AND model = 'b' 
     AND model = 'c' "; 
    }   
    $sqlquery = $querytop . $m; 
    $result = mysql_query("$sqlquery");