Yii1相当于Sql查询

时间:2016-01-19 04:45:55

标签: mysql yii yii1.x

我有这个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   在哪里不是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)

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

implode的第一个参数应该是逗号:

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

答案 1 :(得分:0)

更好的方法是使用QueryBuilder。它看起来像

$result = Yii::app()->db->createCommand()
              ->select('field1, field2')
              ->from('table t')
              ->join('table2 t2', 't2.t_id = t.id')
              ->where('t.property = :property', [':property' => 1])
              ->queryRow();

它更有用,因为QueryBuilder使用PDO语句作为参数,并在SQL方言中进行正确的查询,这取决于您的DBMS类型。

它还支持数组语句,如下所示:

->where(['in', 'field', [1,2,3]])

结果是:

... WHERE field IN (1, 2, 3) ...

是的,它仍然是DAO,没有ActiveRecord :)