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/

10-11 03:00
查看更多