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个简单的查询。
首先需要计算清单表格中有多少列表与listcats表中的给定类别ID相关联。
第二部分是从清单表中获取所有数据(*),这些数据链接到listingcats表中的给定类别ID。
我尝试了很多连接,但由于某种原因,我们没有想要正常工作。任何人都可以根据上面给出的示例表帮助。 '给予'在这种情况下,类别ID将是' 1'。
答案 0 :(得分:0)
对于第一个查询,您可以使用简单连接,并返回计数
SELECT COUNT(Name)
FROM Listings l
JOIN ListingCats lc ON l.id = lc.cat_id
WHERE lc.cat_id = 1
这将返回listing表中的所有行,以使列表id在listingcats表中具有相应的cat_id,但对于cat_id为1的那些行是独占的。然后,count聚合函数返回行数。 / p>
对于第二个,您可以使用上面的相同子查询,但没有聚合函数,并选择所有值。
SELECT * FROM Listings l
JOIN ListingCats lc ON l.id = lc.cat_id
WHERE lc.cat_id = 1
尝试这些,请告诉我他们是否有效,我会尝试与您一起解决这些问题。
修改强>
回顾这个问题后,如果给你一个特定的cat_id,你甚至不需要使用连接,你可以简单地在listing表中查询具有该id的那个。如果给定的id是1:
SELECT COUNT(Name)
FROM Listings l
WHERE l.id = 1
然后,第二个更广泛:
SELECT * FROM Listings l WHERE l.id = 1
答案 1 :(得分:0)
CREATE TABLE `listings` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(10) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `categories` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(10) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `listings_cats` (
`cat_id` int(10) unsigned NOT NULL,
`list_id` int(10) unsigned NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
SELECT c.id, c.name, COUNT(lc.list_id) as the_count
FROM categories c
JOIN listings_cats lc ON (lc.cat_id = c.id)
GROUP BY c.id;
SELECT l.id, l.name, c.name AS category_name
FROM listings l JOIN listings_cats lc ON (lc.list_id = l.id)
JOIN categories c ON (lc.cat_id = c.id);