如何在MySQL查询中添加数据检查?

时间:2011-11-29 10:28:38

标签: mysql

我有三张桌子:

  • $sTable =一张歌曲表(songid,mp3link,artwork,useruploadid等)
  • $sTable2 =与他们相关的歌曲项目表(项目名称,项目名称等)。
  • $sTable3 =歌曲评分表(songid,userid,rating)

所有这些数据都输出到JSON数组并显示在我的应用程序的表格中,以提供歌曲列表,并结合项目和评级数据。

我想要做的是检查“登录用户”是否已对特定歌曲投票,以便我可以将“投票”类添加到返回数据的父元素中。

我希望以最佳性能最佳方式执行此操作,我猜这将返回一个布尔值(1或0),其中1表示已投票,0表示返回。

然后我可以使用javascript来应用类客户端。

'登录用户ID'作为$ loggedin_ID存储在我的PHP脚本中,因此我需要针对给定的songid,针对$ sTable3的'userid'列检查此变量,并返回一个新列(我会想象使用AS)如果存在该songid的匹配条目则结果为1,如果没有则为0。

如何修改我的查询以添加此内容?

以上只是我的想法,可能确实有一个更好/更有效的方法。如果是这样,请不要犹豫,提供您认为可能是实现此功能的更好解决方案。

以下是我当前的查询。感谢。

$sQuery = "SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))."
           FROM $sTable b 
           LEFT JOIN (
                       SELECT COUNT(*) AS projects_count, a.songs_id
                       FROM $sTable2 a
                       GROUP BY a.songs_id
                      ) bb ON bb.songs_id = b.songsID

           LEFT JOIN (
                       SELECT AVG(rating) AS rating, COUNT(rating) AS ratings_count,c.songid
                       FROM $sTable3 c
                       GROUP BY c.songid
                     ) bbb ON bbb.songid = b.songsID

1 个答案:

答案 0 :(得分:1)

可能你正在寻找这样的东西:

select s.songid, s.userid, 
   case when exists 
   ( 
       select songid 
       from sTable3 
       where songid = $songid 
   ) Then 'Voted'
   else
   (
       'Not Voted'
   )
   end
   as 'Voted or Not'
from sTable3 s
where s.userid = $userid