我有这个SQL查询

SELECT * FROM form_fields
WHERE id NOT IN ("3", "1", "6")
ORDER BY FIELD (id, "3" ,"1" ,"6")


我想将其转换为yii1查询。所以我尝试这样

$SQL="SELECT * FROM form_fields WHERE id NOT IN {$sorted_array}  ORDER BY FIELD (id, $sorted_array)";
$connection=Yii::app()->db;
$command=$connection->createCommand($SQL);
$rowCount=$command->execute();
$dataReader=$command->query();


其中$ sorted_array的值为Array ( [0] => 3 [1] => 1 [2] => 6 )

它给我一个错误


  PHP通知
  
  数组到字符串的转换


然后我将$ sorted_array转换为这样的字符串

$string = implode(' ', $sorted_array);


然后再次执行查询

$SQL="SELECT * FROM form_fields WHERE id NOT IN {$string}  ORDER BY FIELD (id, $string)";
$connection=Yii::app()->db;
$command=$connection->createCommand($SQL);
$rowCount=$command->execute();
$dataReader=$command->query();


现在我得到另一个错误


  CDbException
  
  CDbCommand无法执行以下SQL语句:SQLSTATE [42000]:
  语法错误或访问冲突:1064您的SQL中有错误
  句法;检查与您的MySQL服务器版本相对应的手册
  以获得在'3 1 6 ORDER BY FIELD(id,3 1 6)'附近使用的正确语法
  第1行。执行的SQL语句为:SELECT * FROM form_fields
  id不在3 1 6字段中的顺序(id,3 1 6)


代替这个

SELECT * FROM form_fields
    WHERE id NOT IN ("3", "1", "6")
    ORDER BY FIELD (id, "3" ,"1" ,"6")


我的yii1查询产生了此错误的sql查询

SELECT * FROM form_fields
WHERE id NOT IN 3 1 6 ORDER BY FIELD (id, 3 1 6)


任何帮助,将不胜感激

最佳答案

implode的第一个参数应为逗号:

$string = implode(',', $sorted_array);

关于mysql - Yii1等同于Sql查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34868655/

10-16 06:43
查看更多