【发布时间】:2015-05-27 13:16:56
【问题描述】:
您好,我被一个查询卡住了。我只想在 if 语句中的条件为真时执行 join 语句,否则不执行 join 并让其余查询执行。
比如我的查询是这样的:
SELECT `t`.`id`, `t`.`title`, `t`.`date_created`, `t`.`video_id`, `t`.`audio_id`, `t`.`created_by`, `t`.`updated`, `t`.`gamenumber`, `t`.`cat_id`, `t`.`is_deleted`, `t`.`marked_by`, `t`.`is_hidden`, `t`.`battle_type`, `t`.`media` FROM `postdata` `t`
如果 t.video_id != '' 然后运行 join 语句
left join processes as pv on ( pv.video_id = t.video_id)
整个查询中的通用 WHERE 语句
cat_id IS NOT NULL and is_deleted=0 and is_hidden=0 and battle_type="public" ORDER BY date_created
WHERE 语句也需要这个条件 if t.video_id!='' then
pv.status=3
基本上,如果“postdata”表包含包含视频 ID 的字段“video_id”。并且“进程”表也包含这些 video_id。因此,如果 postdata.video_id 不为空,则执行 join 语句以检查 video_id 是否为包含状态 = 3 的进程表。 (如果 status =3 则仅获取视频记录)否则如果 postdata.video_id 为空则执行不带 join 语句和 common Where 语句的查询。
请帮忙。
【问题讨论】:
-
为什么不把
AND t.video_id <> ''放在连接谓词中。你会得到不匹配的行的空值。 -
这和 Yii 有什么关系?
-
@craafter,我已经简化了mysql中的查询。我实际上正在研究 Yii 并使用 CDbcriteria 来执行此查询。