繁体   English   中英

Yii控制器方法SQL查询

[英]Yii controller method SQL query

我试图从表单执行AJAX调用,并在我的模型中编写一个控制器方法以将结果传递回表单。 我不熟悉Yii SQL语句或在Yii上下文中检索/传递数据。 任何人都可以在尝试编写此代码时指导/纠正我的逻辑。

这是原始的mysql查询

"SELECT AVG(rate_syr_mh)FROM packaging_metrics WHERE country LIKE '" . mysql_real_escape_string($country)."'". "AND std_rate != 0 

“到目前为止,这是我的控制器操作。我不确定我是否在正确的轨道上。参数$ country应该是在特定更改时从表单提交的表单输入。

    public function countryRate($country)
{

$country_std_rate = Yii::app()->db->createCommand() 
    ->select('AVG(std_rate)') 
    ->from('packaging_metrics') 
    ->where(array('like', 'country', '%$country%'))
    ->queryRow();

    return $country_std_rate;


}

如何添加原始查询的一部分以避免输入零?

还以这种方式返回查询是否允许AJAX检索以将数字结果放入另一个表格字段中?

如何添加原始查询的一部分以避免输入零?

回答

查看应如何在CDbCommand的where()指定查询,该查询应首先在列表中指定mysql优先级最低的运算符where() ,这取决于您的sql):

数组(运算符,操作数1,操作数2,...),

在的地方条件的评估发生在换句话说,因此你在一种前缀符号的指定运营商。

例如,如果您有:

Where (somecolumn like %somevalue%) AND (somecolumn!=somevalue)

您将其写为:

AND (somecolumn!=somevalue) (like (somecolumn %somevalue%))

因此,这转化为:

->where(array('and','std_rate!=0', array('like', 'country', '%'.$country.'%')))

实际上,通过检查CDBCommand的源代码,尤其是processConditions函数 ,可以更好地理解这processConditions


还以这种方式返回查询是否允许AJAX检索以将数字结果放入另一个表格字段中?

答:不。

要返回ajax数据,您应该回显您的输出。 另外,您可以使用CJSON::encode()对返回值进行JSON编码:

echo CJSON::encode($country_std_rate); // instead of return $country_std_rate
Yii::app->end(); // this is also useful in most situations, almost forgot to add! 

注意:

  1. '%$country%'将不起作用,但'%'.$country.'%'将起作用。

  2. 我对评估的理解是preorder和prefix表示法,不确定yii团队是否打算那样做!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM