跳过第一个重复值并获取第二个值-PHP

跳过第一个重复值并获取第二个值-PHP,php,mysqli,Php,Mysqli,PHP和MYSQLi 我试图获得以下输出:对于项目ID(PJ006) 我首先将“日期”列按降序排列,然后我想跳过第一个值的所有重复值(跳过EM207的所有条目),并显示即时第二个值(预期输出:EM206)。此输出是针对项目ID(PJ006)的 预期输出:对于项目ID:PJ006 Badge ID: EM206 PHP代码:使用第一个徽章ID(EM207),获取项目ID PJ006的数据并显示 $mysqli=mysqli_connect('serverIP','username','passw

PHP和MYSQLi

我试图获得以下输出:对于项目ID(PJ006) 我首先将“日期”列按降序排列,然后我想跳过第一个值的所有重复值(跳过EM207的所有条目),并显示即时第二个值(预期输出:EM206)。此输出是针对项目ID(PJ006)的

预期输出:对于项目ID:PJ006

Badge ID: EM206
PHP代码:使用第一个徽章ID(EM207),获取项目ID PJ006的数据并显示

$mysqli=mysqli_connect('serverIP','username','password','databasename');
 //This data i passed by Ajax
$someID = trim($_POST["storedValue"]);
//This query puts the date column in Desending Order
$query2 ="SELECT * FROM scores1 WHERE  ProjectID='$someID' order by  ScoreDate desc limit 1"; 
$result = mysqli_query($mysqli,$query2)or die(mysqli_error());
$num_row = mysqli_num_rows($result);
while($row=mysqli_fetch_array($result))
{
    //the output is displayed here
    echo $row[1];
}

上述代码中需要进行哪些修改以跳过第一个值的所有重复值(跳过EM207的所有条目)并显示立即的第二个值(预期输出:EM206)。。这个输出是针对项目ID(PJ006)的需要的。好的,如前所述,您实际上想要的是某个特定项目的最新徽章ID——这是第二个条目这一事实有点模糊,在其他情况下可能不成立

我将使用子查询查找每个项目的最新条目:

select
    badgeId,
    projectId
from
    scores1,
    (
        select
            max(date) as max,
            projectId
        from
            scores1
        group by
            projectId
    ) as sub
where
    scores1.date = sub.max
    and scores1.projectId = sub.projectId

然后,您可以为您感兴趣的任何项目id添加检查。不要忘记添加一些索引以获得更好的性能。

好的,如前所述,您实际上想要的是某个特定项目的最新徽章id-这是第二个条目这一事实有点让人费解,在其他情况下可能不成立

我将使用子查询查找每个项目的最新条目:

select
    badgeId,
    projectId
from
    scores1,
    (
        select
            max(date) as max,
            projectId
        from
            scores1
        group by
            projectId
    ) as sub
where
    scores1.date = sub.max
    and scores1.projectId = sub.projectId

然后,您可以为您感兴趣的任何项目id添加检查。别忘了添加一些索引以提高性能。

在这个回答中,我感谢Thamaraiselvam先生帮助我获得了确切的所需输出。谢谢你

有效的解决方案是:

$mysqli=mysqli_connect('serverIP','username','password','databasename');

  $query2 ="SELECT * FROM scores1 where ProjectID='12345' ORDER BY ScoreDate DESC"; 
    $result = mysqli_query($mysqli,$query2)or die(mysqli_error());
    $num_row = mysqli_num_rows($result);
    $badgeid=0; $proid=0 ; $date=0;
                $flag=0;
    while($row=mysqli_fetch_array($result))
    {       
       if($badgeid!=$row['BadgeID'] || $proid!=$row['ProjectID'] ){

                   if($flag==2){
                        echo "$badgeid and $date<br>";
                                                }
                                $flag++;


        $badgeid =$row['BadgeID'];
       $proid =$row['ProjectID'];
                   $date =$row['ScoreDate'];

        }

                }
    ?>
$mysqli=mysqli_connect('serverIP','username','password','databasename');
$query2=“从scores1中选择*,其中PROJECTD='12345'按ScoreDate DESC排序”;
$result=mysqli_query($mysqli,$query2)或die(mysqli_error());
$num_row=mysqli_num_rows($result);
$badgeid=0$proid=0$日期=0;
$flag=0;
while($row=mysqli\u fetch\u数组($result))
{       
如果($badgeid!=$row['badgeid']| |$proid!=$row['ProjectID'])){
如果($flag==2){
回显“$badgeid和$date
”; } $flag++; $badgeid=$row['badgeid']; $proid=$row['projectd']; $date=$row['ScoreDate']; } } ?>
在这个回答中,我感谢Thamaraiselvam先生帮助我完成了确切的所需输出。谢谢你

有效的解决方案是:

$mysqli=mysqli_connect('serverIP','username','password','databasename');

  $query2 ="SELECT * FROM scores1 where ProjectID='12345' ORDER BY ScoreDate DESC"; 
    $result = mysqli_query($mysqli,$query2)or die(mysqli_error());
    $num_row = mysqli_num_rows($result);
    $badgeid=0; $proid=0 ; $date=0;
                $flag=0;
    while($row=mysqli_fetch_array($result))
    {       
       if($badgeid!=$row['BadgeID'] || $proid!=$row['ProjectID'] ){

                   if($flag==2){
                        echo "$badgeid and $date<br>";
                                                }
                                $flag++;


        $badgeid =$row['BadgeID'];
       $proid =$row['ProjectID'];
                   $date =$row['ScoreDate'];

        }

                }
    ?>
$mysqli=mysqli_connect('serverIP','username','password','databasename');
$query2=“从scores1中选择*,其中PROJECTD='12345'按ScoreDate DESC排序”;
$result=mysqli_query($mysqli,$query2)或die(mysqli_error());
$num_row=mysqli_num_rows($result);
$badgeid=0$proid=0$日期=0;
$flag=0;
while($row=mysqli\u fetch\u数组($result))
{       
如果($badgeid!=$row['badgeid']| |$proid!=$row['ProjectID'])){
如果($flag==2){
回显“$badgeid和$date
”; } $flag++; $badgeid=$row['badgeid']; $proid=$row['projectd']; $date=$row['ScoreDate']; } } ?>

您可以在mysqlCan中使用NOT IN操作符。您可以在PHP中提出一些建议,因为该值每天都在变化。我需要选择跳过第一个值的第二个值(以及在降序时重复的所有条目)
从tbl中选择DISTINCT badgeId当您要求跳过所有
EM207
行时,您要寻找的逻辑规则是什么?是否要跳过某个值?如果是这样,您可以只使用
WHERE-badgeid'EM207'
,因为徽章ID不断变化,所以我不能在代码中使用值。。所以逻辑是,我更关注项目id PJ006,当我降序时,我需要跳过第一个条目的所有行。。所以我跳过第1行到第4行,然后根据项目ID PJ006从第6行输出EM206的值。您可以在mysqlCan中使用NOT IN操作符。您可以在PHP中提出一些建议,因为这个值每天都在变化。我需要选择跳过第一个值的第二个值(以及在降序时重复的所有条目)
从tbl中选择DISTINCT badgeId当您要求跳过所有
EM207
行时,您要寻找的逻辑规则是什么?是否要跳过某个值?如果是这样,您可以只使用
WHERE-badgeid'EM207'
,因为徽章ID不断变化,所以我不能在代码中使用值。。所以逻辑是,我更关注项目id PJ006,当我降序时,我需要跳过第一个条目的所有行。。所以我跳过第1行到第4行,然后根据项目ID PJ006从第6行输出EM206的值,我可以使用它,但即使在使用Distinct之后,PHP代码也应该选择第2个值。。。我的php代码应该是什么?我想这段代码会得到不重复的u行,所以当然你可以在EM207之后得到EM206,这与我的代码中已有的相同。。你能建议如何根据PHPThamaraiselvam中的项目ID PJ006选择第二个唯一的徽章ID吗?在你的代码中,你能指出选择第二个值的确切值吗?明白了吗??Happy Codeing buddyI可以使用这个,但即使在我使用Distinct之后,PHP代码也应该选择第二个值。。。我的php代码应该是什么?我想这段代码会得到不重复的u行,所以当然你可以在EM207之后得到EM206,这与我的代码中已有的相同。。您能建议如何根据PHPTHAMARISELVAM中的项目ID PJ006选择第二个唯一的徽章ID吗?在您的代码中,您能指出e吗