gpt4 book ai didi

mysql - 拉拉维尔。使用 WHERENOTIN

转载 作者:行者123 更新时间:2023-11-29 07:07:29 29 4
gpt4 key购买 nike

基本上我想在 Laravel 中构建 tihs 查询,但它不起作用。

SELECT films.id, films.name AS film
FROM films
WHERE films.id NOT IN
(
SELECT films.id
FROM actors, actor_film, films
WHERE actors.id = actor_film.actor_id
AND actor_film.film_id = films.id
GROUP BY films.id
)
ORDER BY films.id DESC
LIMIT 600
;

使用“whereNotIn”我编写了这两个查询:第一个获取数据库中至少有一个 Actor 关联的所有电影,如下所示:

    $films_with_actors = DB::table('films')
->join('actor_film', 'actor_film.film_id', '=', 'films.id')
->join('actors', 'actors.id', '=', 'actor_film.actor_id')
->select( 'films.id')
->groupBy('films.id')
->get();

现在我想获取没有关联 Actor 的电影。为此,我尝试获取上一个方法中未包含的 ID,如下所示:

    $films_with_no_actors = DB::table('films')
->whereNotIn('films.id', $films_with_actors)
->orderBy('films.id', 'desc')
->take(500)
->get();
-

有什么帮助吗?

最佳答案

我根据您共享的代码为您提供了一个基本解决方案。

在 Laravel 中,你有一个名为 pluck 的方法用于检索包含给定键的所有值的数组。

因此,您只能获取 $films_with_actors 的 id。类似于(基于您的第一个查询):

$films_with_actors = DB::table('films')
->join('actor_film', 'actor_film.film_id', '=', 'films.id')
->join('actors', 'actors.id', '=', 'actor_film.actor_id')
->select( 'films.id')
->groupBy('films.id')
->pluck('id')->toArray();

现在您有了一个包含 ids 的数组,您可以将该数组包含在第二个查询的 whereNotIn 子句中:

    $films_with_no_actors = DB::table('films')
->whereNotIn('films.id', $films_with_actors)
->orderBy('films.id', 'desc')
->take(500)
->get();

关于mysql - 拉拉维尔。使用 WHERENOTIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41107175/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com