我的网站上有PHP的投资组合,在这个投资组合中我有3个画廊。在投资组合页面中,我有画廊的预览,每个画廊有4张图片。我得到了一个带来图像的查询,但它在3个画廊中给我带来了相同的图像,而不是在不同的画廊中给我带来不同的图像(因为画廊不同)。
我得到了列画廊和主题,我想对所有内容进行select
查询,当它达到4个第一个图像的画廊1时,它会进入第一个画廊中的两个。
一个例子:
$galeria_1 = $conexao->consultarDados("select * from portfolio where gal = 1 and theme = '{$tem}' limit 4"); //i want to make the query so when it reaches the four results, it search the same but with gal = 2;
答案 0 :(得分:1)
假设您有一个如下所示的表:
create table portfolio (
gal numeric,
theme numeric,
val numeric
);
看起来像这样的数据:
insert into portfolio values (1,10,1);
insert into portfolio values (1,10,2);
insert into portfolio values (1,10,3);
insert into portfolio values (1,10,4);
insert into portfolio values (1,10,5);
insert into portfolio values (2,10,1);
insert into portfolio values (2,10,2);
insert into portfolio values (2,10,3);
insert into portfolio values (2,10,4);
insert into portfolio values (2,10,5);
insert into portfolio values (3,10,1);
insert into portfolio values (3,10,2);
insert into portfolio values (3,10,3);
insert into portfolio values (3,10,4);
insert into portfolio values (3,10,5);
insert into portfolio values (4,10,1);
insert into portfolio values (4,10,2);
insert into portfolio values (4,10,3);
insert into portfolio values (4,10,4);
insert into portfolio values (4,10,5);
您可以运行如下查询:
select *
from (
select p.*
, (@rowNum:=Case when @lastGal=p.gal then @rowNum+1 else 1 end) as rowNumber
, (@lastGal:=p.gal) as currentGal
from portfolio p, (SELECT @rowNum := 0, @lastGal := 0) r
) q
where rowNumber <= 4
order by gal, val;
SQLFiddle:http://sqlfiddle.com/#!9/ecf65/1
SELECT @rowNum := 0, @lastGal := 0
加入查询以创建两个变量:@rowNum
用于存储行号,@lastGal
用于上一行的图库编号。如果当前图库与最后一行相同,我们会增加行号,否则我们将其重置为1.
这模拟了SQL Server中可用的row_number() over Partition
功能,但不能模拟MySQL中的功能。它为每个组中的每一行分配一个数字(其中一个组是一个库的行集),然后WHERE子句限制结果,以便只显示每个组的前四个行号。
答案 1 :(得分:0)
你可以做一个for循环,迭代3个画廊的12个图像,不知道这是你正在寻找的
$j = 1;
for($i = 1; $i <= 12; $i++){
if($j == 1){//first time
$galeria_1 = $conexao->consultarDados("select * from portfolio where gal = \''.$j.'\' and theme = '{$tem}' limit 4");
$j++;
//do stuff with four images gal 1
} else if($i%4){
$galeria_1 = $conexao->consultarDados("select * from portfolio where gal = \''.$j.'\' and theme = '{$tem}' limit 4");
$j++;
//do stuff four images gal x
}
}