如何加入“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?的主要内容,如果未能解决你的问题,请参考以下文章
php sql 中WHERE 的条件:IN(3,2,5,8) 结果如何按IN中的顺序排序