2011-08-22 131 views
0

我有一个需要当前视频的标签并将其与其他视频匹配以获得结果。唯一的问题是我想排除标签来自的视频(排除特定的vid_id)。我尝试了以下,但行AND vid_id!=some_id打破它。有任何想法吗?排除查询结果

$sql = "SELECT video.*,COUNT(*) as count FROM tags LEFT JOIN video 
ON (tags.vid_id = video.vid_id) 
WHERE name IN(?,?) AND vid_id!=some_id 
GROUP BY vid_id ORDER BY count DESC LIMIT 5"; 
+0

尝试在SQL客户端查询 - 它会与错误的回复(如“失踪)”或“VID_ID列名称不明确“。 – Konerak

回答

3
  1. 你忘了关闭括号 ON子句后?

  2. 此外,由于你的VID_ID列是同时存在于视频表 并在标签表,你需要的 WHERE子句在指定表名(是的,即使ON语句要求他们是 等于)

这给:

$sql = "SELECT video.*,COUNT(*) as count 
FROM tags 
LEFT JOIN video 
ON (tags.vid_id = video.vid_id) 
WHERE name IN(?,?) 
AND video.vid_id != some_id 
ORDER BY count DESC 
LIMIT 5"; 
+0

MySQL中'!='和'<>'有什么区别?我一直以为你必须用'<>',但[本手册页](http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_not-equal)意味着它们'同样的事情。 – AgentConundrum

+0

对不起,那些完全一样。将查询更改为更接近原始查询 - 对于'!='或'<>'成为这里的罪魁祸首,混淆的可能性较小。 – Konerak

+0

我以为是。直到您将解释添加到您的帖子的开头,我没有注意到关闭的问题。唯一突出的是''''''改变,所以我认为这是你的修复。 – AgentConundrum