MySQL一对多,只从许多表中提取所选记录

时间:2011-07-14 13:41:07

标签: php mysql one-to-many

我对SQL语句很陌生,我从来都不擅长连接等。我在解决如何执行以下操作时遇到了问题:

我有2个表,一个叫做MUSIC,一个叫做REVIEWS。这两个表链接在一个名为uid的字段上 - MUSIC中的记录是唯一的,但每个MUSIC记录可能有很多评论。

REVIEWS有一个名为thumbsup的字段,如果用户给MUSIC竖起大拇指,则该字段设置为值1。否则,该字段为零。 REVIEWS中可能有很多竖起大拇指,竖起大拇指或没有竖起大拇指。

我正在尝试在MUSIC中显示记录列表,如果有一个包含thumbsup值为1的相应REVIEW记录 - 只有一条记录在REVIEWS中会执行 - 那么在列表页面上显示一个图标。

我已经很好地了解了各种类似的问题,但没有出现这样的问题。我试过围绕类似的连接进行篡改,但坦率地说,它是如何工作的是超出我的范围。抱歉是个白痴。

通过证据证明我至少有过一次,到目前为止,我已根据另一篇文章提出了这个问题:

SELECT m.*, r.thumbsup 
FROM (SELECT MAX(thumbsup) uid FROM reviews GROUP By uid) maxThumbs 
INNER JOIN reviews r ON maxThumbs.uid = reviews.uid 
INNER JOIN music m ON music.uid = reviews.uid  

不用说它不起作用:(

如果有人能用正确的查询结构帮助我,我将非常感激。

非常感谢

泰德。

4 个答案:

答案 0 :(得分:1)

select DISTINCT m.* from music m INNER JOIN reviews r on m.uid = r.uid where r.thumbsup > 0 

答案 1 :(得分:0)

这样的事情怎么样:

SELECT m.*, IFNULL((SELECT 1 FROM reviews r WHERE r.thumbsup > 0 AND m.uid = r.uid LIMIT 1),0) has_review 
FROM music m

答案 2 :(得分:0)

SELECT m.* 
FROM music m
INNER JOIN 
  (SELECT DISTINCT reviews.uid WHERE review.thumbsup > 0) r ON (r.uid = m.uid)

答案 3 :(得分:0)

SELECT DISTINCT m.*, r.thumbsup
FROM music m LEFT JOIN reviews r 
ON (m.uid = r.uid AND r.thumbsup=1);

将返回没有评论的音乐唱片,没有正面评论,混合评论,只有正面评价(显示任何正面评价)