mysql如果条件满足则执行join否则不
Posted
技术标签:
【中文标题】mysql如果条件满足则执行join否则不【英文标题】:mysql if condition met then execute join otherwise not 【发布时间】: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 来执行此查询。
【参考方案1】:
我认为你应该每次都使用左连接并添加pv.status=3
加入条件,例如:
<?php
$where = [
'is_deleted' => 0,
'is_hidden' => 0,
'battle_type' => 'public',
];
$postdata = new postdataModel;
$processes = new processesModel;
$command = $postdata->getDbConnection()->createCommand()
->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 AS t')
->leftJoin('processes AS pv', 'pv.video_id = t.video_id AND pv.status = 3')
->where('cat_id IS NOT NULL AND is_deleted = :is_deleted AND is_hidden = :is_hidden AND battle_type = :battle_type')
->order('t.date_created DESC')
;
$data = $command->queryAll();
mysql会为你解决一切...
【讨论】:
谢谢,我试试看。以上是关于mysql如果条件满足则执行join否则不的主要内容,如果未能解决你的问题,请参考以下文章