mysql - 从第三个表中检索与两个数据透视表匹配的行

标签 mysql laravel laravel-5 eloquent relational-database

我的 Laravel 应用程序中有 5 个表。 3 个主要表是 booksplacestagsbooks 表有一个数据透视表将其与标签相关联:book_tagsplaces 表还有一个数据透视表:place_tags。现在,对于每个地点,我想根据 place_tagsbook_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/

相关文章:

php - 在 RHEL 中安装 PHP mysql 扩展

python - 赋值前引用的MySQLdb错误局部变量(与平常不同)

php - Laravel 迁移自引用外键问题

php - 我怎样才能使一个集合独一无二?

php - 输入在 Laravel 中不起作用时重定向回来

php - 如何使用 Laravel 5.2 将图像添加到 Twitter Bootstrap

php - 如何仅更新和设置当前时间的所有行

Laravel 5 方法未找到异常

php - 违反完整性约束 : 1452 Cannot add or update a child row: laravel 5 error

php - 在 Laravel 中执行准备好的原始 SQL