【问题标题】:How to join a "IN" result and check "where" active = 1?如何加入“IN”结果并检查“where” active = 1?
【发布时间】:2021-10-28 00:33:05
【问题描述】:

在我的查询中,我检查tokens.id 是否存在于dapp_tokens 中。我想补充一点,dapp_tokens 中的结果也必须是dapps 表中的active = 1

所以我需要将tokens.id 加入到dapp_tokens 中找到的行的dapps 表中,但是如何在Raw SQL 中做到这一点?

$data['tokens'] = Token::where('active', 1)
    ->whereRaw('tokens.id in (select token_id from dapp_tokens where active = ?)', [1])
    ->sortable('market_cap')
    ->orderby('id','desc')
    ->paginate($page_count);

【问题讨论】:

  • 到目前为止你尝试过什么?你被困在哪里了?这段代码毕竟看起来不像原始 SQL
  • whereRaw 是 Laravel 中的原始 SQL,我尝试进行左连接,但这似乎不起作用,或者我在当前代码的上下文中做错了。我猜它也适用于 Laravel SQL 语法,但我的想法是使用 RAW 代码使其工作。

标签: php mysql sql laravel laravel-5


【解决方案1】:

我试过这个,但我只能用“IN”获得 1 col 值:

基数违规:1241 操作数应包含 1 列

        $data['tokens'] = Token::where('tokens.active', 1)
            ->whereRaw('tokens.id in (select token_id, dapp_id from dapp_tokens LEFT JOIN dapps ON dapps.id = dapp_id where dapps.active = ?)', [1])
            ->sortable('market_cap')->orderby('id','desc')->paginate($page_count);

编辑:好像我已经有了解决方案,只需要从 whereRaw 中的选择器中删除 dapp_id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 2020-09-07
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    • 2017-03-06
    • 2020-02-05
    相关资源
    最近更新 更多