使用eloquent或fluent从查询结果向数据库表添加值

时间:2015-04-19 19:57:50

标签: php sql laravel eloquent

$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因此想知道是否有一种优雅的方法来解决这个问题?

1 个答案:

答案 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?如果不是,那么你可能不需要大块。这将使代码更简单,更易于理解。