我有两张table:
表a有以下列:
id - rule_id - car_id
100 - 3 - 5
101 - 4 - 5
102 - 2 - 6
103 - 3 - 6
表\u b有更多的列,但这里需要的是:
id - car_id
70 - 5
71 - 6
我想把这两张table合起来。我的代码如下:
$ruleIds = [1,2,3]; // Got from user: User wants to see cars that are not included in those(1,2,3) rules.
$cars = Car::where('type', $type);
$result = $cars->join('rule', 'rule.car_id', 'car.car_id')
->whereNotIn('rule.rule_id', $ruleIds);
但mysql的作用如下:
连接上的两个表 rule.car_id
以及 car.car_id
检查哪里 rule.rule_id != 1
, rule.rule_id != 2
, rule.rule_id != 3
.
但是,对于车号为6的车辆,它会在我申报时返回记录 whereNotIn('rule.rule_id', [1,2,3])
. 它对自己说,car\u id为6没有rule\u id为2,但是rule\u id为3的第二辆车不等于2,所以它再次返回记录。
如果其中一个条件 whereNotIn
条件不一定都匹配吗?
例如:如果我(作为用户)为规则设置了1,2,它不应该从cars表中返回car\ id为6的car,因为在rules表中,我们有一个规则,它的rule\ id是2(规则i(用户)集之一)。
因此,如果1..如果2..如果3..如果1,2,3,4..如果1,2,3,4..如果3..如果1,2,3,4..如果3..如果1,2,3,4..如果3..如果1,2,3,4..如果1,3,4..如果3
关于“编辑您的问题并根据规则显示示例输出\u id=(1,2)。将其显示为表格,而不是难以辨认的文本。“我希望返回值为:
数组()
3条答案
按热度按时间lvjbypge1#
我可以在@timbiegeleisen的帮助下解决这个问题,答案是:
很抱歉英语不好或解释不好:)
为了防止sql注入,我为循环做了那个。有没有其他更好的方法?
在查询中有另一个select,但我只想用join和simple来实现。有没有其他方法可以得到这个?
谢谢大家:)
gzszwxb42#
您的原始mysql查询可能是这样的:
拉威尔代码:
请注意,我没有试图
rule_id
要动态筛选的值。也就是说,我不约束你$ruleIds
查询的数组。其原因是,对于未知数量的规则,很难做到这一点。但是,上面的代码应该会让你走上正确的轨道。1cklez4t3#