如何加入“IN”结果并检查“where” active = 1?

Posted

技术标签:

【中文标题】如何加入“IN”结果并检查“where” active = 1?【英文标题】:How to join a "IN" result and check "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 代码使其工作。 【参考方案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

【讨论】:

以上是关于如何加入“IN”结果并检查“where” active = 1?的主要内容,如果未能解决你的问题,请参考以下文章

根据 WHERE IN 子句数据排序结果集

php sql 中WHERE 的条件:IN(3,2,5,8) 结果如何按IN中的顺序排序

MySQL:将子选择和数组合并到一个IN语句中

AJAX 到 MySQL WHERE IN ($_GET) 请求。排除某些结果

JPQL查询where子句使用IN,如何将参数传递给查询

MYSQL 查询 WHERE IN 条件的问题