有条件地限制mySQL的结果量?

时间:2011-10-26 07:08:00

标签: php mysql

这是我的问题:

SELECT * FROM Photos WHERE Event_ID IN ($eventidstring)

我知道我可以使用LIMIT 5限制此查询的总结果数

我需要限制$ eventidstring中每个值的结果量。

所以如果$ eventidstring = 23,41,23 *

* 并且有10个结果WHERE Event_ID = 23,我想将此数量限制为5.对于$ eventidstring中的所有其他值也是如此。

4 个答案:

答案 0 :(得分:3)

您可能会喜欢在MySQL中使用PARITION类似于Oracle的RANK。

遗憾的是,虽然您可以使用this method

解决此问题,但MySQL中没有此功能

将其转储到内联视图中,然后选择排名为< = 5;

的行

因此:

SELECT t.* FROM (
SELECT ( 
        CASE Event_id 
        WHEN @curEventId 
        THEN @curRow := @curRow + 1 
        ELSE @curRow := 1 AND @curEventId := Event_Id END
      ) AS rank,
      p.*
FROM      Photos p INNER JOIN (SELECT @curRow := 0, @curEventId := '') r
ORDER BY p.Event_Id DESC
) t
WHERE t.rank <= 5 ORDER BY t.Event_Id asc;

考虑一下你如何通过Event_Id'选择'前五名。您始终可以在ORDER BY p.Event_Id DESC之后添加更多内容以确定此内容。

答案 1 :(得分:1)

我认为你在PHP中的某个地方写了那个查询,所以你需要将$eventidstring分成它的组件值,在第一个之后形成一个SELECT和UNION。

你可以用某种循环来做这件事,并在循环中连接查询字符串......

答案 2 :(得分:0)

如果我理解正确并且你想要每个五个,你可以使用它:

(SELECT * FROM Photos WHERE Event_ID = 23 LIMIT 5)
UNION
(SELECT * FROM Photos WHERE Event_ID = 41 LIMIT 5)
UNION
(SELECT * FROM Photos WHERE Event_ID = ... LIMIT 5)
...

答案 3 :(得分:0)

可能使用SELECT UNION,但您需要为每个值选择一个新选项:

SELECT * FROM Photos WHERE Event_ID = 23 LIMIT 5
UNION SELECT * FROM Photos WHERE Event_ID = 41 LIMIT 5
UNION SELECT ...