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否则不的主要内容,如果未能解决你的问题,请参考以下文章

if 判断

while循环和if流量控制

MySQL存储过程——一一检查是不是满足某些条件;如果不满足,则退出程序并返回特定消息

如果条件满足则选择 A 行,否则为每个组选择 B 行

条件选择

如果不满足条件,则停止前进到下一页