按字母顺序排列的MYSQL组中的最后记录

时间:2014-10-24 21:23:29

标签: php mysql

我正在尝试按照“Retrieving the last record in each group”中给出的答案,但我遇到了问题

我的问题是,当我只想回显计数3时,我正在回显Y78430(即计数1和3)

我正在尝试选择数据组的最后一条记录,其中最后一条记录是字母小写字母。

此处的数据示例(表格为'schedulelocation'): -

 Count       cif_train_uid       cif_stp_indicator        Other Data

   1          Y78430                   p                    zzzzzzz
   2          Z45012                   p                    fffffff
   3          Y78430                   o                    sssssss

在上述数据中有2 X Y78430。我想只回应其中一个。 cif_stp_indicator为 o 的那个 - 即字母表中的字母低于“ p

这是我的代码: -

 $b="SELECT s1.cif_train_uid,s1.cif_stp_indicator,s1.schedule_start_date
 FROM schedulelocation s1
 LEFT JOIN schedulelocation s2
  ON (s1.cif_train_uid AND s1.cif_stp_indicator < s2.cif_stp_indicator)
 WHERE s2.cif_stp_indicator is Null AND s1.cif_train_uid='Y78430' ";             

 $l=mysqli_query($mysql_link,$b);   

 if ($l) {

 while($berths=mysqli_fetch_array($l,MYSQLI_ASSOC))
 {  

 echo $berths['cif_train_uid']; 
 echo $berths['cif_stp_indicator'];
 echo $berths['schedule_start_date'];
 echo "</b>";
 echo "</b>";


 }    

             }          

任何帮助非常感谢。谢谢

1 个答案:

答案 0 :(得分:1)

您需要使用聚合查询来查找要显示的相应行,并将其与您的基本信息相关联。

您的汇总查询是:

              SELECT cif_train_uid, 
                     MIN(cif_stp_indicator) as cif_stp_indicator
                FROM schedulelocation
            GROUP BY cif_train_uid

它返回一对(列车,指示器)对的列表,其中指示器是列车的最低值(词法首先)。

然后你INNER将它加入你的查询的其余部分。

     SELECT s1.cif_train_uid,s1.cif_stp_indicator,s1.schedule_start_date
       FROM (   SELECT cif_train_uid, MIN(cif_stp_indicator) as cif_stp_indicator
                  FROM schedulelocation
              GROUP BY cif_train_uid
            ) AS m 
 INNER JOIN schedulelocation s1
         ON m.cif_train_uid=s1.cif_train_uid 
        AND m.cif_stp_indicator = s1.cif_stp_indicator 
  LEFT JOIN schedulelocation s2
         ON s1.cif_train_uid 
        AND s1.cif_stp_indicator < s2.cif_stp_indicator)
      WHERE s2.cif_stp_indicator is Null    /* IS THIS CORRECT ?? */
        AND s1.cif_train_uid='Y78430'

注意我不能100%确定您的自我加入操作会发生什么。我认为你的第一个WHERE子句消除了自连接实际发现的所有行。我不明白。