簡體   English   中英

從第三個表中檢索與兩個數據透視表匹配的行

[英]Retrieving rows from a third table that match two pivot tables

我的Laravel應用中有5張桌子。 3個主要表是booksplacestags books表有一個數據透視表,可將其與標簽book_tags places表還有一個數據透視表: place_tags 現在,對於每個地方,我都希望基於place_tagsbook_tags標簽來獲取書籍。

books
    book_tags
places
    place_tags
tags

這是一個SQLFiddle

我查看了laravel文檔,發現這種關系最接近的是多對多關系 ,但是,只有一個透視表具有tag_type ,這不是我所擁有的。

如何基於兩個數據透視表中的標簽構建此查詢以檢索每個地方的書籍? MySQL中的答案也很酷,我只是不知道查詢的樣子如何...

如何基於兩個數據透視表中的標簽構建此查詢以檢索每個地方的書籍? MySQL中的答案也很酷,我只是不知道查詢的樣子如何...

詢問

SELECT 
   books.*
 , places.*
FROM 
 book_tags
INNER JOIN 
 place_tags
ON
 book_tags.tag_id = place_tags.Tag_id

INNER JOIN 
 books
ON
 book_tags.book_id = books.id

INNER JOIN 
 places
ON
 place_tags.place_id = places.id 

結果

| id |       title | id | name |
|----|-------------|----|------|
|  1 | Science Boo |  1 | Shop |

參見演示http://sqlfiddle.com/#!9/f2674d/13

或使用類似列的別名

詢問

SELECT 
   books.id AS book_id
 , books.title AS book_title
 , places.id AS place_id 
 , places.name AS place_name
FROM 
 book_tags
INNER JOIN 
 place_tags
ON
 book_tags.tag_id = place_tags.Tag_id

INNER JOIN 
 books
ON
 book_tags.book_id = books.id

INNER JOIN 
 places
ON
 place_tags.place_id = places.id 

結果

| book_id |  book_title | place_id | place_name |
|---------|-------------|----------|------------|
|       1 | Science Boo |        1 |       Shop |

參見演示http://sqlfiddle.com/#!9/f2674d/15

@RaymondNijland尚不清楚嗎? 我想獲取給定位置的所有書籍:P數據添加到sql :) sqlfiddle.com/#!9/f2674d/1

然后,您需要添加

WHERE
  places.name = 'name'

對上面的查詢

這是我在讀的書。

假設標簽模型:

class Tag {
      public function books() { 
          $this->belongsToMany(Book::class);
      }
      public function places() {
          $this->belongsToMany(Place::class);
      }
}

然后,如果您需要獲取所有帶有特定位置的通用標簽的書籍,則可以執行以下操作:

$tagsForPlace = Tag::whereHas("places", function ($query) { $query->where("id", $placeId; })->with("books")->get(); //$PlaceId is the id you are interested in.

那么您所需的書就是:

$booksWithTagsForPlace = $tagsForPlace->map(function ($tag) { 
      return $tag->books; 
})->unique("id"); //Unique to filter out duplicate books if any

我對這個問題的理解可能是錯誤的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM