如何计算具有特定ID的联接表中的所有行

时间:2011-11-01 15:27:34

标签: php mysql count

我有两张桌子,一张是歌曲列表。另一个是项目清单。

它们由songsID加入。我的查询目前看起来像这样: -

$sQuery = "
        SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))."
        FROM   $sTable
        LEFT JOIN
            $sTable2
            ON ($sTable2.songs_id = $sTable.songsID)
        $sWhere
        $sOrder
        $sLimit
    ";
    $rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); 

$ sTable和$ sTable2变量显然是两个表。

这很好用并列出我在'$ sTable'中的所有行。您在上面看到的JO​​IN并不是列出歌曲所必需的,但就我能够利用我有限的MySQL能力而言。

我想要做的是在我的JSON数据中返回另一列,显示'$ sTable'中每首歌曲的所有项目的总COUNT(在$ sTable2中)。因此,计算具有特定'songsID'的每个项目。

$ aColumns如下: -

$aColumns = array( 'song_name', 'artist_band_name', 'author', 'song_artwork', 'song_file', 'genre', 'song_description', 'uploaded_time', 'emotion', 'tempo', 'songsID', 'user', 'happiness', 'instruments', 'similar_artists', 'play_count' );

这些是$ sTable中的列,其中'songsID'是自动增量主键,它也存储在'$ sTable2'中,用于将歌曲链接到他们的项目。

我需要能够将'projects_count'添加到上面的$ aColumns数组中。

希望这次我能更好地解释自己。抱歉我的SQL体验非常小。

1 个答案:

答案 0 :(得分:2)

select count(*) as projects_count, a.songs_id
from Table2 a
group by a.songs_id

这将为您提供每songs_id个项目的数量。

您还可以使用以下方式查询特定的song_id:

select count(*) as projects_count
from Table2 where Table2.songs_id = <your_song_id>

而且:

select b.*, bb.projects_count from Table b 
left join (
   select count(*) as projects_count, a.songs_id
   from Table2 a
   group by a.songs_id
) bb on bb.songs_id = b.songsID