同一字段多个查询条件时遇到的一个问题
需求,加载礼物表中,租户id=0 和租户id=10 的数据,并排除 id =10,11,12
第一次写法(这个写法是错误的)
$whereOr=[
['tenant_id', '=', 0],
['gift_id', 'not in', [1,2,3]]
];
$where=[
['tenant_id', '=', 10],
['gift_id', 'not in', [1,2,3]],
]
ActivityVoteGiftModel::where($where)->whereOr($whereOr)->select();
//得到的sql
SELECT
tenant_id
FROM
`yjy_live_gift` ``
WHERE
`tenant_id` = 10
AND `id` NOT IN ( 11, 10, 9 )
OR `tenant_id` = 0
OR `id` NOT IN ( 11, 10, 9 )
ORDER BY
id DESC
LIMIT 0,10
查询出来的结果 只要租户id 等于0 或者 id 只要不等于 11,10,9 的数据就会查询出来
正确的条件应该是
(`tenant_id` = 10 AND `id` NOT IN ( 11, 10, 9 ) )
or
(`tenant_id` = 0 and `id` NOT IN ( 11, 10, 9 ) )
第二次写法
$whereOr=[
['tenant_id', '=', 0],
['gift_id', 'not in', [1,2,3]]
];
$where=[
['tenant_id', '=', 10],
['gift_id', 'not in', [1,2,3]],
]
ActivityVoteGiftModel::whereOr([$whereOr,$where])->select();
//得到的sql
SELECT
tenant_id
FROM
`yjy_live_gift` ``
WHERE
(`tenant_id` = 10 AND `id` NOT IN ( 11, 10, 9 ) )
or
(`tenant_id` = 0 and `id` NOT IN ( 11, 10, 9 ) )
ORDER BY
id DESC
LIMIT 0,10
thinkphp 解决方案地址 https://www.kancloud.cn/manual/thinkphp5_1...
第三次写 使用in查询
$where=[
['tenant_id', 'in',[10,0]],
['gift_id', 'not in', [1,2,3]],
]
ActivityVoteGiftModel::where($where)->select();
再次仔细文档发现,可以同一字段多个查询条件可以使用区间查询 https://www.kancloud.cn/manual/thinkphp5_1...
本作品采用《CC 协议》,转载必须注明作者和本文链接