gpt4 book ai didi

php - mysql如果条件满足则执行join否则不

转载 作者:行者123 更新时间:2023-11-30 22:43:16 25 4
gpt4 key购买 nike

您好,我被一个查询卡住了。我只想在 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 != '' 然后运行连接语句

left join processes as pv on ( pv.video_id = t.video_id) 

整个查询中的公共(public) 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 是否为包含 status=3 的进程表。 (如果 status =3 则只获取视频记录)否则如果 postdata.video_id 为空则执行没有连接语句和普通 Where 语句的查询。

请帮忙。

最佳答案

我认为你应该每次都使用 left join 并添加 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会为你解决一切...

关于php - mysql如果条件满足则执行join否则不,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30483644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com