Listings table
+------------+---------+
| name | id |
+------------+---------+
| Example 1 | 1 |
| Example 2 | 2 |
| Example 3 | 3 |
| Example 4 | 4 |
| Example 5 | 5 |
| Example 6 | 6 |
+------------+---------+
Categories table
+------------+---------+
| name | id |
+------------+---------+
| Catname 1 | 1 |
| Catname 2 | 2 |
| Catname 3 | 3 |
+------------+---------+
ListingCats table
+--------+---------+
| cat_id | list_id |
+--------+---------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 3 | 1 |
| 3 | 3 |
| 2 | 2 |
| 1 | 5 |
| 2 | 6 |
+--------+---------+
我试图建立2个查询,这应该很简单。
要做的第一件事是要获得清单表中有多少清单关联到listingcats表中给定类别ID的计数。
第二部分是从清单表获取行中的所有数据(*),这些数据与清单猫表中的给定类别ID相关。
我尝试了许多联接,由于某种原因,没有人希望它正常工作。任何人都可以根据上面给出的示例表提供帮助。在这种情况下,“给定”类别ID将为“ 1”。
最佳答案
对于第一个查询,您可以使用简单的联接,并返回一个计数
SELECT COUNT(Name)
FROM Listings l
JOIN ListingCats lc ON l.id = lc.cat_id
WHERE lc.cat_id = 1
这将返回清单表中的所有行,以使清单ID在listingcats表中具有相应的cat_id,但不包括cat_id为1的那些。然后,count合计函数返回行数。
对于第二个查询,您可以仅使用上面的相同子查询,但不使用合计函数,然后选择所有值。
SELECT * FROM Listings l
JOIN ListingCats lc ON l.id = lc.cat_id
WHERE lc.cat_id = 1
试试看那些,请让我知道它们是否有效,我将尝试与您一起更多地研究它们。
编辑
回头看问题之后,如果您得到一个特定的cat_id甚至不需要使用联接,则可以简单地在Listings表中查询具有该ID的表。如果给定的id是一个:
SELECT COUNT(Name)
FROM Listings l
WHERE l.id = 1
再说一次,对于第二个更为广泛:
SELECT * FROM Listings l WHERE l.id = 1
关于mysql - 如何基于相关表获取数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24920405/