$query = SubjectUser::where('user_id', Auth::id())->select('subjectlist_name')->get();
上面的查询从表一中产生了这些结果:
[{"subjectlist_name":football},{"subjectlist_name":cricket},
{"subjectlist_name":tennis},{"subjectlist_name":f1}]
我有另一张表如下:
表二
ID|second_user_id|topic |mark(enum '0','1')
1 | 2 |football |0
2 | 2 |tennis |0
3 | 2 |f1 |0
4 | 2 |Rugby |0
我现在想要遍历查询结果并检查匹配的主题并标记匹配的主题,以便我的第二个表看起来像这样:
表二
ID|second_user_id|topic |mark(enum '0','1')
1 | 2 |football |1
2 | 2 |tennis |1
3 | 2 |f1 |1
4 | 2 |Rugby |0
我遇到的问题是,我不确定会有多少subjectlist_name
因此想知道是否有一种优雅的方法来解决这个问题?
答案 0 :(得分:0)
它确实取决于您期望的负载。如果这是一个罕见的用例,并且您的网站上没有大量流量,那么我可能会考虑使用这样的SQL查询:
update second_table_name set mark = 1 and second_user_id= <??> where topic in (select subjectlist_name from first table where user_id=<??>)
这应该通常做你想要的,虽然这不会有效。如果这种情况每10秒钟发生一次以上(和/或您正在进行一些严重的其他流量),那么您可能希望在表格中迭代块并使用
更新子句... where topic in ("f1", "...")
然而,在这种情况下,请注意,您应该有一些索引继续进行这些操作。
另外请注意&#34;不确定要预期多少subjectlist_names&#34;:只查看一个近似数字:是否有可能超过1000?如果不是,那么你可能不需要大块。这将使代码更简单,更易于理解。