Yii复杂条件查询


        $obj = $this->find();

        $obj->where(array(
            'and',
            array(
                'or',
                // 要添加的开始时间在已存在的活动里
                array(
                    'AND',
                    ['<=', 'start_time', $param['startTime']],
                    ['>=', 'end_time', $param['startTime']],
                ),
                // 要添加的结束时间在已存在的活动里
                array(
                    'AND',
                    ['<=', 'start_time', $param['endTime']],
                    ['>=', 'end_time', $param['endTime']]
                ),
                // 要添加的结束时间在已存在的活动里
                array(
                    'AND',
                    ['>=', 'start_time', $param['startTime']],
                    ['<=', 'end_time', $param['endTime']]
                )
            ),
            array('shop_id' => $param['shopId'], 'status' => '1')
        ));

        if (isset($param['id']) && $param['id'] > 0)
        {
            $obj->andWhere(['!=', 'id', $param['id']]);
        }
        $select = 'id';
        $result = array();
        $obj->orderBy('create_time desc');

        $result = $obj->select($select)->asArray()->one();
        // dd($obj->createCommand()->getRawSql());

用于复杂的where查询 sql语句是下面这样

SELECT
	`id`
FROM
	`tablename`
WHERE
	(
		(
			(`start_time` <= '1568563200')
			AND (`end_time` >= '1568563200')
		)
		OR (
			(`start_time` <= '1568563201')
			AND (`end_time` >= '1568563201')
		)
		OR (
			(`start_time` >= '1568563200')
			AND (`end_time` <= '1568563201')
		)
	)
AND (
	(`shop_id` = '112324')
	AND (`status` = '1')
)
AND (`id` != 2)
ORDER BY
	`create_time` DESC

希望能帮助到你们  ^_^ >~

发布了50 篇原创文章 · 获赞 8 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_36999656/article/details/100925364