【问题标题】:Adding values to a database table from a query result using eloquent or fluent使用 eloquent 或 fluent 从查询结果向数据库表添加值
【发布时间】:2015-06-26 10:11:55
【问题描述】:
$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,因此想知道是否有一种优雅的方法来解决这个问题?

【问题讨论】:

    标签: php sql laravel eloquent


    【解决方案1】:

    这在一定程度上取决于您所期望的负载。如果这是一个罕见的用例,并且您的网站上没有大量流量,那么我可能会考虑使用这样的 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 秒发生一次以上(和/或您有一些严重的其他流量正在进行),那么您可能希望在表 1 上逐块迭代并使用

    执行更新子句
    ... where topic in ("f1", "...") 
    

    但是,在这种情况下,请注意,您应该使用一些索引来执行这些操作。

    另外请考虑“不确定有多少 subjectlist_names”:只需查看一个大概的数字:是否有可能超过 1000 个?如果不是,那么您可能无论如何都不需要分块。这将使代码更简单,更容易被每个人理解。

    【讨论】:

    • 好的,我知道你来自哪里。我只是原型,所以我猜主题名称将是一个低数字,例如 15。我希望你能给出正确的语法来回答上面的问题,因为我在实现时遇到了问题。
    猜你喜欢
    • 1970-01-01
    • 2012-08-25
    • 2021-10-26
    • 2017-07-03
    • 2016-01-02
    • 1970-01-01
    • 2020-10-18
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多