php - Yii1 : How to use concat function in mysq like query

标签 php mysql activerecord yii yii1.x

我想在 like 表达式 中使用 Mysql Concat 函数
我想将firstnamelastname合并为fullname,根据fullname得到匹配的结果。
我已经在 YII1 中尝试过了。下面是我的代码:

    $criteria = new CDbCriteria();
    $criteria->select = "*";
    $criteria->select = 'CONCAT(firstname , "" ,  lastname) AS fullname';
    $criteria->addCondition('fullname LIKE :match');
    $criteria->params = array(':match' => $query);
    $models = User::model()->findAll($criteria);

下面是生成的错误信息:

CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'fullname' in 'where clause'
(Error 500)
    CDbCommand::fetchColumn() failed: SQLSTATE[42S22]: Column not found: 1054
Unknown column 'fullname' in 'where clause'. The SQL statement executed
was: SELECT COUNT(*) FROM `members` `t` WHERE fullname LIKE :match.

提前致谢

最佳答案

如果以后不需要全名,可以在WHERE子句中使用CONCAT方法:

$criteria = new CDbCriteria();
$criteria->addCondition('CONCAT(userId , " " , username) LIKE :match');
$criteria->params = array(':match' => $query);
$models = User::model()->findAll($criteria);

但是,如果您确实想在 SELECT 子句中保留全名,则只能在 HAVING 子句中使用此别名:

$criteria = new CDbCriteria();
$criteria->select = '*, CONCAT(userId , " " , username) AS fullname';
$criteria->having = 'fullname LIKE :match';
$criteria->params = array(':match' => $query);
$models = User::model()->findAll($criteria);

请注意,在这种情况下,您的用户模型应该具有全名属性,否则您将无法访问全名字段。

关于php - Yii1 : How to use concat function in mysq like query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26866940/

相关文章:

php - 消息: Operand should contain 1 column(s)

php - 更新表的单列,值应该从0开始,然后递增1

python - 我的 .fetchall() 没有在我的 Flask 应用程序上更新?

mysql - 为什么受影响的行需要时间来更新

ruby-on-rails - 协会协会的 rails 订单

php - 为什么 PHPUnit 将一些右大括号显示为未被覆盖?

php - 为什么我的 Symfony 2 缓存暖机被多次调用?

c# - Entity Framework 向多个表添加数据

ruby-on-rails - Rails 4 事件记录数组查询

ruby-on-rails - Rails 无法从记录中删除 "\r\n"