2

我需要计算 track_plays 中具有特定 track_ID 的行数,并将其与从各种表中选择大量数据的查询一起加入。

这是我到目前为止所拥有的;

SELECT
    T.ID,
    T.url,
    T.name,
    T.pic,
    T.T_ID,

    COUNT(P.T_ID) AS plays,
    S.Status, 

    G.gig_name,
    G.date_time,
    G.lineup,
    G.price,
    G.ticket,

    E.action,
    E.ID,
    E.timestamp,
    E.E_ID

FROM
    events E
    LEFT JOIN 
    TRACKS T
    ON T.ID = E.ID AND E.action = 'has uploaded a track.' AND E.E_ID = T.T_ID

    LEFT JOIN 
    STATUS S
    ON S.ID = E.ID AND E.action = 'has some news.' AND E.E_ID = S.S_ID

    LEFT JOIN 
    GIGS G
    ON G.ID = E.ID AND E.action = 'has posted a gig.' AND E.E_ID = G.G_ID

    LEFT JOIN 
    track_plays P
    ON P.A_ID = E.ID AND E.action = 'has uploaded a track.' AND E.E_ID = P.T_ID

WHERE E.ID = '3'
ORDER BY E.timestamp DESC LIMIT 15

Hopeflly 这应该比文字更快地解释我想要做的事情,但基本上是plays一首曲目的播放次数。Events是所有新 ID 用于任何新内容的表。它们被赋予了一个动作,因此我们可以确定它们是什么类型的事件,从而从正确的表中检索数据。

目前,使用 COUNT 查询会给出类似这样的信息

ID  name  pic  T_ID  plays ...

3    1     2    44    100

我放在那里的数据只是有代表性的,它提供的列比这更多。关键是它应该给出这样的东西;

ID  name  pic  T_ID  plays ...

3    1     2    44    100

3    3     1    48    10

4    8     2    21    86

正如您所看到的,其中的 COUNT 有很多数据被取出。

如果您需要更多详细信息,请发表评论。我不想讲太多细节,因为它可能不需要,而且我有胡扯的倾向。

谢谢!

4

2 回答 2

3

看到这个问题,因为你需要一个明确的分组依据。我认为您需要将此添加到您的查询中:

...
GROUP BY P.T_ID
于 2013-04-28T14:46:28.453 回答
2

完成,感谢所有帮助过的人。我错过了GROUP BY条款。现在它就像一个魅力。这是成品:

SELECT
    T.ID,
    T.url,
    T.name,
    T.pic,
    T.T_ID,

    COUNT(P.T_ID) AS plays,
    S.Status, 

    G.gig_name,
    G.date_time,
    G.lineup,
    G.price,
    G.ticket,

    E.action,
    E.ID,
    E.timestamp,
    E.E_ID

FROM
    events E
    LEFT JOIN TRACKS T
        ON T.ID = E.ID AND E.action = 'has uploaded a track.' AND E.E_ID = T.T_ID
    LEFT JOIN STATUS S
        ON S.ID = E.ID AND E.action = 'has some news.' AND E.E_ID = S.S_ID
    LEFT JOIN GIGS G
        ON G.ID = E.ID AND E.action = 'has posted a gig.' AND E.E_ID = G.G_ID
    LEFT JOIN track_plays P
        ON P.A_ID = E.ID AND E.action = 'has uploaded a track.' AND E.E_ID = P.T_ID
WHERE E.ID = '3'
GROUP BY T.T_ID
ORDER BY E.timestamp DESC LIMIT 15
于 2013-04-28T14:57:44.297 回答