2017-06-23 14:52:11 2428次浏览 7条回答 1 悬赏 10 金钱

SELECT * from table where ( a=1 AND (b IN (1,2,3)) ) OR ( a=2 AND (b IN (4,5,6)) )

一直想知道类似这样的sql,用yii2怎么写,总不能一直写sql拼接吧,有大神知道的吗?请教了

  • 回答于 2017-06-23 15:16 举报

    我来写一下,哈哈

    Tabel::find()->where(['and','a=1','b in(1,2,3)'])->orWhere('and','a=2','b in(4,5,6)');
    
    1 条回复
    回复于 2017-06-23 15:24 回复

    后边少了个中括号

  • 回答于 2017-06-23 15:21 举报

    想看着正常点,也可以这样

    Tabel::find()->where(['and', ['a' => 1,'b' => [1,2]]])->orWhere(['and',['a' => 2,'b' => [4,5,6]]]);
    
    觉得很赞
  • 回答于 2017-06-23 16:00 举报

    66666666

  • 回答于 2017-06-23 16:19 举报
    Model::findBySql(SELECT * from table where ( a=1 AND (b IN (1,2,3)) ) OR ( a=2 AND (b IN (4,5,6)) ))->one();
    
  • 回答于 2017-06-24 00:07 举报
    Table::find()->where([
       'or',
       [
          'and',
          [
             '=',
             'a',
             1
          ],
          [
             'in',
             'b',
             [1,2,3]
          ]
       ],
       [
          'and',
          [
              '=',
              'a',
              2
          ],
          [
             'in',
             'b',
             [4,5,6]
          ]
       ]
    ]);
    
  • 回答于 2017-06-30 17:47 举报

    多看看文档,orwhere,andwhere,包括直接new db/query就好

  • 回答于 2017-07-13 15:19 举报

    Tabel::find()->where(['a'=>1,'b'=> [1,2,3]])->orWhere(['a'=2,'b'=> [4,5,6]])->select();

您需要登录后才可以回答。登录 | 立即注册
o__荒年
总监

o__荒年

注册时间:2015-01-17
最后登录:2019-06-29
在线时长:32小时27分
  • 粉丝6
  • 金钱2395
  • 威望40
  • 积分3115

热门问题