Sorting a MySQL query with ORDER BY or with PHP sort functions

前端 未结 5 1124
深忆病人
深忆病人 2020-12-21 16:27

I have a query that I want to sort alphabetically, but the trick is that I want the sorting to treat two columns equally. For instance, if the first row of first_col<

相关标签:
5条回答
  • 2020-12-21 17:06

    As they say above, UNION ALL is your friend, and, of course, if you have only one table, you can always do this:

    (SELECT field1 AS name FROM TABLE1) 
    UNION ALL 
    (SELECT field2 AS name FROM TABLE1) 
    ORDER BY name DESC
    

    So, you are asking for two diferent rows in the same table, and ordering it as it was one.

    0 讨论(0)
  • 2020-12-21 17:12

    Your question isn't completely clear but you could try using this as your ORDER BY clause:

    ORDER BY LEAST(first_col, second_col)
    

    Demonstration:

    CREATE TABLE table1 (first_col VARCHAR(100) NOT NULL, second_col VARCHAR(100) NOT NULL);
    INSERT INTO table1 (first_col, second_col) VALUES
    ('a', 'b'),
    ('d', 'e'),
    ('f', 'c');
    
    SELECT first_col, second_col
    FROM table1
    ORDER BY first_col, second_col;
    
    a b
    d e
    f c
    
    SELECT first_col, second_col
    FROM table1
    ORDER BY LEAST(first_col, second_col);
    
    a b
    f c
    d e
    
    0 讨论(0)
  • 2020-12-21 17:12

    Try

    ORDER BY CONCAT(b_name, l_name)
    

    or (if your fields are NULL when EMPTY)

    ORDER BY COALESCE(b_name, l_name)
    
    0 讨论(0)
  • 2020-12-21 17:14

    If your tables are very similar you can do this

    In my case I have a table test_a with 2 columns id and name

    (SELECT * FROM test_a a1) 
    UNION ALL 
    (SELECT * FROM test_a a2) 
    ORDER BY name DESC
    
    0 讨论(0)
  • 2020-12-21 17:24

    Thanks for all your help guys, but none of your answers allowed me to sort the data AND echo it into the HTML table correctly once sorted. A UNION might have worked, but I think my solution was faster as far as figuring it all out goes.

                    $query = "SELECT c_id, b_name, l_name, f_name, phone FROM customers";
                    $result = mysql_query($query);
                    mysql_close($link);
    
                    $num = mysql_num_rows($result);
    
                    for ($i = 0; $i < $num; $i++){
                        $row = mysql_fetch_array($result);
    
                        if($row[b_name]!=''){
                            $new_result[$i]['c_id'] = $row[c_id];
                            $new_result[$i]['c_name'] = $row[b_name];
                            $new_result[$i]['phone'] = $row[phone];
                        }
    
                        else{
                            $new_result[$i]['c_id'] = $row[c_id];
                            $new_result[$i]['c_name'] = $row[l_name].", ".$row[f_name];
                            $new_result[$i]['phone'] = $row[phone];                         
                        }
                    }                       
    
                    foreach ($new_result as $key => $row) {
                       $c_id[$key]  = $row['c_id'];
                       $c_name[$key] = $row['c_name'];
                       $phone[$key] = $row['phone'];
                    }
    
                    array_multisort($c_name, SORT_ASC, $c_id, SORT_ASC, $new_result);   
    
                    for ($i = 0; $i < $num; $i++){
    
                        $class = (($i % 2) == 0) ? "table_odd_row" : "table_even_row";
    
                        echo "<tr class=".$class.">";
    
                            echo "<td><a href=Edit_Customer.php?c_id=".$new_result[$i]['c_id'].">".$new_result[$i]['c_id']."</a></td>";
                            echo "<td><a href=Edit_Customer.php?c_id=".$new_result[$i]['c_id'].">".$new_result[$i]['c_name']."</a></td>";
                            echo "<td><a href=Edit_Customer.php?c_id=".$new_result[$i]['c_id'].">".$new_result[$i]['phone']."</a></td>";
    
                        echo "</tr>";                       
    
                    }
    
                ?>      
    
            </table>
    
    0 讨论(0)
提交回复
热议问题