开始执行我的英语,但我需要一个sql的帮助:
我有表格,例如: ID,id_user,offer,timestamp
我需要获得一个带有排序的行,这将是页面上的一个id_user(例如,每10行中只有一个唯一的id_user,第二个带有时间戳的顺序)
示例:
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
简单的“一页上的独特用户优惠”
感谢您的帮助!
答案 0 :(得分:0)
你试过“分组”吗?
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_users。如果包含条件语句(“where”),则可以根据登录人员的id_user创建唯一页面。
希望这会有所帮助。 :)
干杯!
(请注意,按时间戳排序可能会有点奇怪。不要忘记,您总是可以使用您选择的语言[PHP等]发布流程。)
答案 1 :(得分:0)
此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";
}
?>
输出:
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
很抱歉添加另一个答案 - 否则我会添加评论,但我认为代码在这里更有帮助。