Php Mysql:获取每页具有唯一列的行
对于begin Exec,请使用我的英语,但我需要一个sql方面的帮助: 我有一张带有报价的表格,例如:ID、ID\U用户、报价、时间戳 我需要得到一个带有排序的行,这将是页面上的一个id\u用户,例如每10行中只有一个唯一的id\u用户,第二个带有时间戳的顺序 例如:Php Mysql:获取每页具有唯一列的行,php,mysql,sql,Php,Mysql,Sql,对于begin Exec,请使用我的英语,但我需要一个sql方面的帮助: 我有一张带有报价的表格,例如:ID、ID\U用户、报价、时间戳 我需要得到一个带有排序的行,这将是页面上的一个id\u用户,例如每10行中只有一个唯一的id\u用户,第二个带有时间戳的顺序 例如: 1, Pepa, Auto, 1.1.2011 2, Pepa, Motorka, 1.1.2011 3, Karel, Traktor, 2.1.2011 4, Lukas, Jeep, 2.1.2011 5, Pepa, A
1, Pepa, Auto, 1.1.2011
2, Pepa, Motorka, 1.1.2011
3, Karel, Traktor, 2.1.2011
4, Lukas, Jeep, 2.1.2011
5, Pepa, Autokara, 3.1.2011
6, Jindra, Traktor, 5.1.2011
=>在第页上排序2行
**1. Page**
1, Pepa, Auto, 1.1.2011
3, Karel, Traktor, 2.1.2011
**2. Page**
2, Pepa, Motorka, 1.1.2011
4, Lukas, Jeep, 2.1.2011
**3. Page**
5, Pepa, Autokara, 3.1.2011
6, Jindra, Traktor, 5.1.2011
在一个页面上提供简单独特的用户优惠
谢谢你的帮助 你试过分组吗
delimiter //
connect pepa
drop table if exists offers;
create table offers (
id SERIAL,
id_user VARCHAR(20) NOT NULL,
offer VARCHAR(20) NOT NULL,
timestamp TIMESTAMP DEFAULT NOW()
);
insert into offers
(id_user,offer)
values
('Pepa', 'Auto'),
('Pepa', 'Motorka'),
('Karel', 'Traktor'),
('Lukas', 'Jeep'),
('Pepa', 'Autokara'),
('Jindra', 'Traktor');
select * from offers group by id_user order by timestamp;
//
这将产生:
id id_user offer timestamp
4 Lukas Jeep 2011-06-05 21:14:10
6 Jindra Traktor 2011-06-05 21:14:10
1 Pepa Auto 2011-06-05 21:14:10
3 Karel Traktor 2011-06-05 21:14:10
请注意,所有id_用户都不会重复。如果您在其中包含一个条件语句,则可能可以基于登录者的id_用户创建一个唯一页面
希望这有帮助
干杯
请注意,按时间戳排序在这里可能有点奇怪。不要忘记,您可以随时使用您选择的语言[PHP等]进行后期处理。此PHP代码将生成与您在问题中列出的相同的输出。这也许不是世界上最有效率的事情,但它完成了任务 您可能可以编写一个时髦的MySQL查询来实现这一点,但我不知道它在数千条记录上的伸缩性有多好,等等。您正在以这种方式生成页面:
<?php
// Collect stuff from the database
$dbc=mysqli_connect('127.0.0.1','user','passwd','pepa') or
die('Could not connect!');
$getOffers='select * from offers';
$rs=mysqli_query($dbc,$getOffers);
while($thisRow=mysqli_fetch_assoc($rs))
$offers[]=$thisRow;
mysqli_close($dbc);
// Create the pages
// (this is probably a bit over the top, but you get the idea)
foreach($offers as $oI => $thisOffer)
$offers[$oI]['used']=false; // <-- tell us if we've used the record or not
$thisUser='Pepa'; // <-- the user who should appear at the top of each page
$numRecsPerPage=2; // <-- the number of records per page
$cPg=-1; foreach($offers as $oI => $thisOffer) {
if($thisOffer['id_user']==$thisUser) {
$cPg++;
$offers[$oI]['used']=true;
$page[$cPg][]=$thisOffer;
$recsUsed=1; foreach($offers as $pI => $procOffer) {
if(!$offers[$pI]['used'] && $offers[$pI]['id_user']!=$thisUser) {
$offers[$pI]['used']=true;
$page[$cPg][]=$procOffer;
$recsUsed++;
}
if ($recsUsed>=$numRecsPerPage) break;
}
}
}
// Print the pages
foreach($page as $thisPage) {
foreach($thisPage as $thisRow)
echo $thisRow['id']."\t".$thisRow['id_user']."\t".
$thisRow['offer']."\t".$thisRow['timestamp']."\n";
echo "\n";
}
?>
很抱歉添加了另一个答案-否则我会添加注释,但我认为这里的代码更有用。您能编写一个伪代码算法来解释您如何决定哪些行应该放在哪里吗?在计算上可能很难找到一种方法来排列数据,这样就不会有用户在同一页面上出现两次。这就像背包问题,它是NP-完全的。你需要处理没有很多行的情况吗?例如,在您的示例中,如果您想在一个页面上显示5行,它将如何工作?尽管总共只有6个条目,但仍会有3个页面,因为有3个Pepa行吗?此查询使用GROUP BY,但只返回唯一的行,但我需要每页都具有特定顺序唯一行的所有行。
1 Pepa Auto 2011-06-05 21:14:10
3 Karel Traktor 2011-06-05 21:14:10
2 Pepa Motorka 2011-06-05 21:14:10
4 Lukas Jeep 2011-06-05 21:14:10
5 Pepa Autokara 2011-06-05 21:14:10
6 Jindra Traktor 2011-06-05 21:14:10