【发布时间】: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’”
【问题讨论】: