【问题标题】:A LEFT OUTER JOIN with a ORDER BY '$x' is not sorting properly带有 ORDER BY '$x' 的 LEFT OUTER JOIN 未正确排序
【发布时间】:2018-04-13 18:49:47
【问题描述】:

我有以下 SELECT 语句,它应该返回记录集 ORDERED BY Last Name 而不是。我检查了姓氏字段中是否有任何空白字符/空格并且没有,因为它们都已使用 $last_name = trim(filter_input(INPUT_POST, 'LastName', FILTER_SANITIZE_STRING)); 进行了修剪。

 $query_PaidOrders = "SELECT * FROM `orders` WHERE `payment_received` = '1'";
$rs_PaidOrders=$conn->query($query_PaidOrders);

if($rs_PaidOrders === false){
    trigger_error('SQL error:'.$query_PaidOrders.' Error: '.$conn->error, E_USER_ERROR);
}
else{
  while ($row_PaidOrders=$rs_PaidOrders->fetch_assoc()) {
    $PaidOrderId=$row_PaidOrders['order_id'];
    $query_select_events = "SELECT customers.last_name AS LASTNAME,
                        customers.first_name AS FIRSTNAME,
                        order_details.member_id AS MEMBERID,
                        order_details.event_type AS EVENTTYPE,
                        order_details.event_distance AS EVENTDISTANCE, 
                        order_details.keep_stats AS KEEPSTATS
                        FROM `order_details`

 LEFT OUTER JOIN customers ON order_details.member_id = customers.customer_id 

WHERE order_details.event_id = '$eid' AND order_details.counted_for_discount='1' AND order_details.ORDERNUM = '$PaidOrderId' ORDER BY LASTNAME ASC";

       $rs_events=$conn->query($query_select_events);

       if($rs_events === false){
       trigger_error('SQL error:'.$query_select_events.' Error: '.$conn->error, E_USER_ERROR);
       }
       else{
            while($row_order_details=$rs_events->fetch_assoc()){
      $NAME = $row_order_details['LASTNAME'].", ".$row_order_details['FIRSTNAME'];  
      $member_id=$row_order_details['MEMBERID'];
      $event_type=$row_order_details['EVENTTYPE'];
      $event_distance=$row_order_details['EVENTDISTANCE'];
      $keep_stats=$row_order_details['KEEPSTATS'];
            ?>
            <tr>
               <td><?php echo "$NAME";?></td>
                etc...

我的结果是: B...、H...、H...、S...、B...、R....

我真的被这个难住了。任何帮助将不胜感激。

【问题讨论】:

  • 您是否尝试在 mysql shell(PHP 外部)中直接针对数据库运行查询?
  • 当您说您检查了“空白”字符时,您是指空格和制表符,还是您也检查了其他非打印字符?
  • luksch:我编辑了原始问题以显示查询位于 while 循环内。 UUeerdo:我编辑了原始问题以显示我在 $_POST 上使用了什么来在插入数据库之前清理输入。
  • 我是否应该将其组合成 1 个带有多个 LEFT OUTER JOINS 的查询?它是不是因为在完成第二个“While”之前必须迭代第一个“While”?
  • minimal reproducible example 请。包括不正常的东西。和代码剪切&过去&运行。另外,您为什么不使用一个查询?另外,为什么您循环的 id 会有任何顺序? PS Google stackoverflow 用于您正在尝试做的事情。 (除了试图通过这个问题找到这个代码的特定问题。)

标签: mysql left-join sql-order-by


【解决方案1】:

问题在于我没有将所有内容合并到 1 个查询中。一旦我这样做了,ORDER BY last name 就可以正常工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 2020-03-11
    相关资源
    最近更新 更多