2016-02-25 3 views
0

Мне нужно сделать подсчет столбца на основе приведенной таблицы. Я пытаюсь объединить его в 1 запрос вместо его разделения.Подсчитайте столбец получаемой таблицы, полученной из таблицы

Изображение, которое у меня ниже, обеспечивает лучшую иллюстрацию. Предположим, что у меня 1000 записей внутри PostTable, и я хочу получить последние 20 записей на основе PostTable.DateTime. У меня нет проблем с этим.

Но, основываясь на приведенных 20 найденных записей, я хочу сделать COUNT функцию, чтобы вычислить возникновение сколько раз LikeID происходит с существованием этого ImageID найдено.

SELECT PostTable.PostID, PostTable.UserID, COUNT(LikeID), PostTable.DateTime 
FROM PostTable, LikeTable 
WHERE PostTable.ImageID = LikeTable.ImageID 
AND LikeTable.LikeID = ?????? // I'm stuck here 

enter image description here

ответ

0

Вам нужно сгруппировать, так что попробуйте это:

SELECT PostTable.PostID, PostTable.UserID, COUNT(LikeID) LikeCount, PostTable.DateTime 
FROM PostTable, LikeTable 
WHERE PostTable.ImageID = LikeTable.ImageID 
GROUP BY PostTable.PostID, PostTable.UserID, PostTable.DateTime 
HAVING COUNT(LikeID) > 0 

Подробнее о группировке: https://dev.mysql.com/doc/refman/5.1/en/group-by-handling.html

Ох и рассмотреть вопрос о поиске в более современный синтаксис JOIN:

SELECT pt.PostID, pt.UserID, COUNT(lt.LikeID) LikeCount, pt.DateTime 
FROM PostTable pt 
LEFT JOIN LikeTable lt ON pt.ImageID = lt.ImageID -- Note it's a left join now 
GROUP BY pt.PostID, pt.UserID, pt.DateTime 
HAVING COUNT(lt.LikeID) > 0 

@sagi ^^^;)

Упрощенный пример

-- Two tables, a post can have many likes 
CREATE TABLE post (postId INT); 
CREATE TABLE `like` (postId INT); 

-- Insert some posts and likes for some of those posts 
INSERT INTO post VALUES (1),(2),(3),(4),(5),(6),(7),(8); 
INSERT INTO `like` VALUES (1),(1),(3),(3),(5),(6),(7),(8); 

-- Take a look at the data 
SELECT * FROM post; 
SELECT * FROM `like`; 

-- Count the number of likes per post 
SELECT p.postId, COUNT(l.postId) likes 
FROM post p 
LEFT JOIN `like` l ON p.postId = l.postId 
GROUP BY p.postId 
HAVING COUNT(l.postId) > 0; -- This removed the posts with no likes 

Это пример того, что вы ищете?

+1

При ответе на людей вы всегда должны использовать EXPLICIT JOIN SYNTAX – sagi

+0

Почему вы должны использовать EJS при ответе на людей? В этом случае я не должен использовать его в повседневной жизни? –

+0

Конечно, вы должны, я имею в виду, особенно, когда отвечаем людям, которые не знают, что это так хорошо! – sagi