【问题标题】:SQL How to order by differents timesSQL如何按不同时间排序
【发布时间】:2022-01-31 22:35:28
【问题描述】:

您好,我在数据库中为一个航班创建了两行,一个用于到达,另一个用于离开。现在需要按订单中的到达时间和出发时间来订购。

这是我的代码,但它不起作用。 在我选择的日期,我必须以权利顺序显示到达和离开,例如:

航班 1 : 10:30 到达 航班 2:10:55 出发 航班 1 : 11:00 出发 航班 5:11:20 出发 等等……

$sqlArr = "SELECT * FROM flights  WHERE arr_date = '$date' OR dep_date = '$date' ORDER BY 
eta,etd ASC";

$query = mysqli_query($cnx, $sqlArr);

foreach ($query as $key => $v ){
 if ($v['xid_arrival'] == 0) {?>
  <tr>
   <td>ARR</td>
   <td><?=$v['arr_date'];?> </td>
   <td><?=$v['atyp'];?> </td>
   <td><?= $v['reg'];?> </td>
   <td><?=$v['arr_cls'];?> </td>
   <td><?=$v['adep'];?> </td>
   <td><?= date('H:i', strtotime($v['eta']));?> </td>
   <td onclick="openRow(this, <?= $v['id_flt'];?>)">+</td>
  </tr>
  <tr hidden  id="<?= $v['id_flt'];?>">
   <td colspan="6">hidden id <?= $v['id_flt'];?></td>
  </tr>
  <?php } else  { ?>
  <tr>
   <td>DEP</td>
   <td><?=$v['dep_date'];?> </td>
   <td><?=$v['atyp'];?> </td>
   <td><?= $v['reg'];?> </td>
   <td><?=$v['dep_cls'];?> </td>
   <td><?=$v['ades'];?> </td>
   <td><?= date('H:i', strtotime($v['etd']));?> </td>
   <td onclick="openRow(this, <?= $v['xid_arrival'];?>)">+</td>
  </tr>
  <tr hidden id="<?= $v['xid_arrival'];?>">
   <td colspan="6">hidden xid  <?= $v['xid_arrival'];?></td>
  </tr>
<?php   }?>
<?php } ?>

【问题讨论】:

    标签: php html sql


    【解决方案1】:

    您需要创建一列,其中包含出发日期或到达日期,具体取决于该列在一行中定义的日期和顺序。

    类似的东西

    SELECT 
     *,
     CASE
       WHEN eta > 0 THEN eta
       WHEN etd > 0 THEN etd
     END as sort_order
    FROM flights
    WHERE
     arr_date = '$date' OR dep_date = '$date' 
    ORDER BY 
     sort_order ASC;
    
    

    并记得转义作为 SQL 查询输入的数据,以防止 SQL 注入漏洞。

    SELECT * 是惰性编码。仅选择您需要的列。

    【讨论】:

    • 感谢您的回答,但我不需要按日期订购,而是按时间订购。
    • 是的,对时间字段执行此操作。请参阅我添加的示例。
    • 好的,现在我明白了,我只需要一列,不能在两个不同的列/行上排序。谢谢
    猜你喜欢
    • 1970-01-01
    • 2018-03-02
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    相关资源
    最近更新 更多