2015-09-27 54 views
1

我正在做一个作业,并且对于某个视图的SQL语句有问题。 基本上我有餐馆,可以使帖子和用户可以喜欢邮政(很像Facebook喜欢的过程)。SQL语句与计数

这个想法是创建一个SQL查询,它显示了由RIF ='1123J'(例如)餐厅所做的所有帖子以及每个帖子的喜欢量。

这些都是表结构:

CREATE TABLE 'posts'(
    'ID' int(11) NOT NULL AUTO_INCREMENT, 
    'restaurant_rif' varchar(255) NOT NULL, 
    'content' text NOT NULL, 
    'creation_date' datetime NOT NULL, 
    PRIMARY KEY ('ID'), 
    UNIQUE KEY 'ID' ('ID') 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=0 ; 

CREATE TABLE 'likes' (
    'post_id' int(11) NOT NULL, 
    'restaurant_rif' varchar(255) NOT NULL, 
    'user_mail' varchar(255) NOT NULL, 
    'liked_date' datetime NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

我应该得到的答案或多或少是这样的:

+----------+------------+------------------+ 
| Post ID | Contenido | Amount of Likes | 
+----------+------------+------------------+ 
|  1 | Test 1  |  12   | 
+----------+------------+------------------+ 
|  2 | Test 2  |  50   | 
+----------+------------+------------------+ 
|  1 | Test 3  |  120  | 
+----------+------------+------------------+ 
+2

如果这是家庭作业,那么你毫无疑问会尝试一些东西。请编辑你的问题,显示你的尝试。 –

+0

yes按照@GordonLinoff的建议,您应该向我们展示您已尝试的操作 – ddw147

回答

2
select *, (select count(*) from likes l where l.post_id = p.id) as num_likes 
from posts p 
where restaurant_rif = '<rif>' 
+0

这工作只是**完美**!我在括号之外进行计数并选择*,但是我有“语法”错误。我不知道你可以这样做(我并不想使用加入)。谢谢! – Fingolricks

+1

所以你知道技术术语,它被称为相关的标量子查询。 – shawnt00

1

你可以通过posts表的字段连接两个表和组。请注意,由于帖子的ID是附加字段唯一反正组不会打破它更多的,但这需要作为select所有字段的值应为集合表达式或group by列表的项目:

SELECT p.id, p.content, COUNT(*) 
FROM  posts p 
JOIN  likes l ON p.id = l.post_id 
WHERE p.restaurant_rif = '1123J' 
GROUP BY p.id, p.content 
+0

您可以按MySQL中的文本列进行分组吗? – shawnt00

+0

@ shawnt00 yup,当然。 – Mureinik

+0

Thx为编辑@Mureinik。我不知道如何做到这一点。 – Fingolricks