如何在 laravel 5.8 中合并两个 sql 表

Posted

技术标签:

【中文标题】如何在 laravel 5.8 中合并两个 sql 表【英文标题】:How to combine two sql table in laravel 5.8 【发布时间】:2020-05-13 03:15:42 【问题描述】:

我正在尝试比较两个表以检查用户数据是否已经存在于另一个表中。我展示了一些他们谈论 whereRaw 的帖子,但细节还不够,我试图运行查询,但没有得到我想要的。

更新 我有两张桌子,一张是两个人之间的挑战

Challenge Table  id,user_one, user_two, data_one, data_two,winner_id

我的第二张桌子是

vote Table id, user_id, battle_id, voted_user

我想检查用户是否已经对该表进行投票,如果是,则跳过该挑战表并向用户显示剩余表数据。

$challenges = DB::table('challenges')->whereRaw([
            ['challenges.user_one', '!=', $uid],
            ['challenges.id', '!=', 'vote.id'],
        ])->orWhereRaw([
            ['challenges.user_one', '!=', $uid],
            ['challenges.id', '!=', 'vote.id'],
        ])->get();

【问题讨论】:

你能发布你遇到的 SQL 错误吗? Challenge 和 Vote 表是如何通过哪个外键连接起来的? 挑战id是battle_id,战斗在user_one和user_two之间 |在 vaotes - user_id 是投票的用户 【参考方案1】:

你可以通过crossJoin实现它

$challenges = DB::table('challenges')->crossJoin('vote')
        ->where('challenges.user_one', '!=', $uid)
        ->where('challenges.id', '!=', 'vote.id')
        ->orWhere('challenges.user_one', '!=', $uid)
        ->orWhere('challenges.id', '!=', 'vote.id')->get();

参考:https://laravel.com/docs/5.8/queries

【讨论】:

加入表使结果无用。没有连接表有没有其他方法可以做到这一点 SELECT * FROM table1,table2 实际上只是交叉连接

以上是关于如何在 laravel 5.8 中合并两个 sql 表的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.8:如何将两个参数传递给 Event 和 Listener

Laravel 5.8 有条件地插入 sql 片段

如何在 Laravel 5.8 中附加授权标头

Laravel 5.8 SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误

如何在 laravel 5.8 中使用 mailchimp 发送简单邮件

如何在 Laravel 5.8 中使用 Eloquent 进行查询?