2010-08-04 72 views
0

我有一个小问题,在MySQL的声明如下:输出SQL语句进行分组

SELECT cmfilm.*, cmgenre.titel AS genretitel, cmvertoning.*, cmzaal.titel AS zaaltitel 
FROM cmfilm 
     LEFT JOIN cmvertoning ON cmvertoning.film_id=cmfilm.id 
     LEFT JOIN cmgenre ON cmfilm.genre_id=cmgenre.id 
     LEFT JOIN cmzaal ON cmvertoning.zaal_id=cmzaal.id 
WHERE cmvertoning.id IN(74,74,74,74) 
ORDER BY cmfilm.id ASC 

,因为我是在问同一个ID为4次,只给我1分的结果。但我希望将结果返回4次,正如我要求的那样。谁知道如何解决这个问题?

+0

你总是可以做 'query union all query union all query union all query' – 2010-08-04 14:57:54

+0

虽然这有点奇怪。 (为什么)你(真的)想要4个相同的结果? (这是你会得到的)。如果这是因为您期待4个不同的行(基于链接到您的主表的表),则您的查询将需要更改。 – Tobiasopdenbrouw 2010-08-04 14:59:52

+0

您确定要在您的WHERE子句中使用cmvertoning.id而不是cmvertoning.film_id或cmvertoning.zaal_id? – Zaki 2010-08-04 15:05:42

回答

1

也许在应用程序端实现这一点会更好 - 将返回的行放入地图中,然后遍历所需的ID并从地图获取适当的行。因为还有另外一个问题 - 行可能不是按照您指定ID的顺序排列的顺序(顺便说一句,此行排序问题也可以使用field来解决)。

UNION解决方案也可以工作。但是,说实话,如果你需要多次读取相同的行,我认为你有一些设计问题。

1

你没有要求4行,你问任何行id是74,74,74或74 - 其中只有一行。

真正的问题是,你为什么要同一行4次?

0

我不认为你可以在没有某种循环或使用UNION ALL语句的情况下做到这一点。