Existiert keine Abfrage
Sep 27 2020
Ich habe ein Problem mit einer Abfrage.
In der Posts-Tabelle habe ich posts.id, dann habe ich in der Reviews-Tabelle posts_id (Fremdschlüssel -> posts.id), reviews.id. Ich möchte die posts_id abfragen, die nicht in der Bewertungstabelle (post_id) vorhanden sind.
Ich benutze Laravel Query Builder. Ich versuche wie ->
$r = DB::table('reviews') ->select(DB::raw('count(id) as rev_count, posts_id')) ->groupBy('posts_id') ->get(); foreach ($r as $rr) { $p = DB::table('posts')
->select('id')
->where('id', '!=', $rr->posts_id)
->get();
}
Ich habe den Wert erfolgreich extrahiert. aber mit zu viel Komplexität, vielleicht fehlerhaft. Wenn es eine direkte Abfrage gibt, um es zu extrahieren?
Antworten
1 Sujitmohanty30 Sep 27 2020 at 19:03
Wie wäre es mit not exists,
SQL-Abfrage:
select *
from posts
where not exists
(select reviews.posts_id
from reviews
where reviews.posts_id = posts.id)
Äquivalente laravelAbfrage:
DB::table('posts')
->select('id')
->whereNotExists(function ($query) { $query->select("reviews.posts_id")
->from('reviews')
->whereRaw('reviews.posts_id = posts.id');
})
->get();
Es gibt diesen SO-Link, der auch für Sie nützlich sein könnte