2011-11-29 40 views
1

我有三个表:如何在MySQL查询中添加对数据的检查?

  • $sTable =歌曲(songid,mp3link,艺术品,useruploadid等)的表
  • $sTable2 =项目表与链接到他们(专案编号,songid,项目歌曲命名等)
  • $sTable3 =歌曲评级(songid,用户ID,等级)

所有这些数据被输出到JSON阵列和在我applicati显示在表中的一个表提供歌曲列表,并结合项目和评分数据。

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

我愿意以最有效的最佳方式来做到这一点,我猜想会返回一个布尔值(1或0),其中1被投票,否则返回0。

我可以使用JavaScript应用类客户端。

'logged in user id'被存储在我的PHP脚本中作为$ loggedin_ID,所以我需要简单地检查这个变量对$ sTable3列的'userid'给定的songid并返回一个新列(我会想象使用AS),如果该歌曲ID有匹配的条目,则结果为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

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

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 
+0

感谢MGA,这看起来像正确的做法,但我无法将其集成到我的查询没有得到别名/语法错误。可能是由于我对MySQL的相对缺乏经验。尽可能多的我不想问,你会介意更具体一点如何将它与我目前的查询集成吗?这对像我这样的新手来说非常有帮助。 – gordyr

+0

稍微摆弄一下,我就到了那里...并且在这个过程中学到了一两件事。非常感谢MGA。你是个明星。 :-) – gordyr

+0

@gordyr,我真的很抱歉,但我实际上得不到,你想把它整合到什么?您发布到您的问题中的查询我无法理解,但如果您对此有更详细的了解,我将很乐意提供帮助。 –