Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.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_Sql - Fatal编程技术网

Php Mysql:获取每页具有唯一列的行

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

对于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, 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