我的 Laravel 应用程序中有 5 个表。 3 个主要表是 books
、places
和 tags
。 books
表有一个数据透视表将其与标签相关联:book_tags
。 places
表还有一个数据透视表:place_tags
。现在,对于每个地点,我想根据 place_tags
和 book_tags
中的标签获取书籍。
books
book_tags
places
place_tags
tags
这是一个SQLFiddle
我浏览了 laravel 文档,最接近的是 many to many polymorphic relationship ,但是这样一来,就只有一个带有 tag_type
的数据透视表,而我没有。
我将如何构建此查询以根据两个数据透视表中的标签检索每个地点的书籍? MySQL 中的答案也很酷,我只是不知道这作为查询会是什么样子......
最佳答案
How would I build this query to retrieve the books for each place based on tags in both pivot tables? Answers in MySQL are cool too, I just don't know how this would look like as a query...
查询
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 what's unclear? I'd like to get all the books for a given place :P Data added to sql :) sqlfiddle.com/#!9/f2674d/1
然后你需要添加
WHERE
places.name = 'name'
上面的查询
关于mysql - 从第三个表中检索与两个数据透视表匹配的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50370279/