【问题标题】:mysql query with case and then counting the same query giving errorsmysql查询带大小写,然后计算相同的查询给出错误
【发布时间】:2016-01-23 00:16:08
【问题描述】:

我不知道该怎么说。

我有一个问题:

SELECT * , (

CASE 
WHEN t.video_id IS NOT NULL 
THEN pv.status
ELSE 4 
END
) AS video_status
FROM  `battles`  `t` 
LEFT JOIN process_videos pv ON ( pv.video_id = t.video_id ) 
WHERE title IS NOT NULL 
AND cat_id IS NOT NULL 
AND is_deleted =0
AND is_hidden =0
AND battle_type =  "public"
HAVING video_status
IN ( 3, 4 ) 
ORDER BY  `t`.`video_id` DESC 
LIMIT 0 , 30

我的查询工作正常,但是当我添加 model->count() 函数时,它会将我的查询变成这个。

SELECT COUNT(*) FROM (SELECT *, ( CASE 
WHEN t.video_id IS NOT NULL 
THEN pv.status
ELSE 4 
END
) AS video_status FROM `battles` t LEFT JOIN process_videos pv on (pv.video_id = t.video_id) WHERE t.title IS NOT NULL AND t.cat_id IS NOT NULL AND t.is_deleted=0 AND t.is_hidden=0 and t.battle_type="public" HAVING video_status IN ( 3, 4 )) sq

现在这产生了问题。我从 mysql 收到错误: 首先我得到“#1248 - 每个派生表都必须有自己的别名”,然后在更新查询时,我在查询中提到的列中添加了“t”别名。现在我有“重复的列名''”

我看到了这样的问题here。但是有没有更好的方法,这样我就不需要自己添加别名了。

添加了更多查询/过滤器,但我在此处添加了基本查询。 可能需要 mysql 和 yii 中的解决方案。我正在使用 Yii 1.x

添加更多描述。 在 Yii:

$criteria->select  = "*, ( CASE 
            WHEN t.video_id IS NOT NULL 
            THEN pv.status
            ELSE 4 
            END
            ) AS video_status";
        $criteria->join = "LEFT JOIN process_videos pv on (pv.video_id = t.video_id)";
        $criteria->order = $orderBy;
        $criteria->alias = 't';
        $criteria->condition = "t.title IS NOT NULL AND t.cat_id IS NOT NULL AND t.is_deleted=0 AND t.is_hidden=0 and battle_type='public'".$condition1; // and pv.status=3
        $criteria->having = " video_status IN ( 3, 4 )";
        if(!$count){
            $criteria->limit = 10
            $criteria->offset = 0
            $model = battles::model()->resetScope()->findAll($criteria);
        }
        else
        {
            $model_count = battles::model()->resetScope()->count($criteria);
            return $model_count;
        }

我的两个条件一个接一个地运行。当我需要计算战斗时。它在 mysql 中显示错误,而没有计数相同的查询运行正确。

修改了我的问题:添加了 yii 模型查询。 @scaisEdge "video_status IN (3, 4)" 仅使用 HAVING 子句。如果我在 where 子句中使用它会显示错误。错误“‘where 子句’中的未知列‘video_status’”

【问题讨论】:

    标签: php mysql yii


    【解决方案1】:

    Having 用于聚合函数。我在您的第一个选择中没有看到聚合函数 .... 案例 ..

    用这种方式尝试 where 子句

     SELECT * , (
       CASE 
       WHEN t.video_id IS NOT NULL 
         THEN pv.status
         ELSE 4 
       END
       ) AS video_status
       FROM  `battles`  `t` 
       LEFT JOIN process_videos pv ON ( pv.video_id = t.video_id ) 
       WHERE title IS NOT NULL 
       AND cat_id IS NOT NULL 
       AND is_deleted =0
       AND is_hidden =0
       AND battle_type =  "public"
       AND  video_status IN ( 3, 4 ) 
       ORDER BY  `t`.`video_id` DESC 
       LIMIT 0 , 30;
    

    【讨论】:

    • 我的第二个查询有问题。第一个工作正常,但我也会尝试你的建议。第二个查询给出错误。你能推荐一下吗?
    • 他们写在我上面的问题中。
    • 您是否已经尝试过` $criteria->having = " t.video_status IN ( 3, 4 )";` ?
    • 我想通了。我在查询中使用t.columnName 添加了所有战斗表列,它起作用了。并且`$criteria->having = "video_status IN (3, 4)";`在不添加t.的情况下工作如果我们在查询中创建别名列并想根据它获取记录,我们必须使用HAVING子句而不是使用它在 WHERE 子句中。现在我的查询工作正常。谢谢
    • 不,您的建议不正确,对我没有用处。对不起,我不是你投票的那个人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多