2015-09-27 4 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

Это работает просто ** отлично **! Я делал счет за пределами скобки и выбирал *, но у меня были «синтаксисы» ошибок. Я не знал, что вы можете сделать это так (и я не хотел использовать Join). спасибо! – Fingolricks

+1

Значит, вы знаете технический термин, он называется коррелированным скалярным подзапросом. – shawnt00

1

Вы могли бы объединить эти две таблицы и группы по полям posts таблицы , Обратите внимание, что поскольку идентификатор сообщения уникален в любом случае группа дополнительные поля не разбить его больше, но это не требуется, поскольку все поля в 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

Смежные вопросы