Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 有条件地限制mySQL的结果量?_Php_Mysql - Fatal编程技术网

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

Php 有条件地限制mySQL的结果量?,php,mysql,Php,Mysql,我的问题是: SELECT * FROM Photos WHERE Event_ID IN ($eventidstring) 我知道我可以使用limit 5限制此查询的结果总数 我需要$eventistring中每个值的结果数量限制。 如果$eventistring=23,41,23* *有10个结果,其中Event_ID=23,我想将这个数量限制为5。$eventidstring中的所有其他值也是如此。如果我理解正确,并且您希望每个值取五个值,则可以使用以下方法: (SELECT * FRO

我的问题是:

SELECT * FROM Photos WHERE Event_ID IN ($eventidstring)
我知道我可以使用limit 5限制此查询的结果总数

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

如果$eventistring=23,41,23*


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

如果我理解正确,并且您希望每个值取五个值,则可以使用以下方法:

(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)
...

可能使用SELECT UNION,但每个值都需要一个新的SELECT:

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

在MySQL中做一些类似于Oracle的按分区排名的事情,您可能会有一些乐趣

遗憾的是,这个功能在MySQL中不可用,尽管您可以使用


将其转储到内联视图中,然后选择那些排名为的行,我认为您正在PHP中的某个地方编写查询,因此需要将
$eventistring
拆分为它的组件值,形成一个select for each并在第一个值之后合并所有值


您应该使用某种类型的循环来执行此操作,并在循环中连接查询字符串…

请显示表定义-创建表语句。是的,除了上面的解决方案之外,这似乎是我唯一的解决方案。这真是难以置信
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;