簡體   English   中英

使用ORDER BY或PHP排序功能對MySQL查詢進行排序

[英]Sorting a MySQL query with ORDER BY or with PHP sort functions

我有一個查詢,我想按字母順序排序,但是訣竅是我希望排序能平等地對待兩列。 舉例來說,如果第一行first_col等於apple和第二排second_col等於aardvark我想要的第二行中的值second_col到的第一行中的值之前上市first_col 值(不是NULL'' )總是存在的每一行中second_col ,但在價值first_col可以'' 希望我已經解釋得足夠好了。 我不在乎是否必須為此使用MySQL或PHP,但是一旦排序,該數組就會被讀取並回顯到HTML表中。 有什么想法嗎?

編輯

這就是我現在所擁有的代碼。 在我的MySQL查詢中,我需要b_namel_name相等。 b_name並不總是具有值。 當我將值放入表中時,它基於b_name的存在。 如果b_name不存在, f_namel_name合並以替換b_name

                $query = "SELECT * FROM customers ORDER BY b_name, l_name";
                $result = mysql_query($query);
                mysql_close($link);

                $num = mysql_num_rows($result);                         

                for ($i = 0; $i < $num; $i++){

                    $row = mysql_fetch_array($result);

                    $class = (($i % 2) == 0) ? "table_odd_row" : "table_even_row";

                    if($row[b_name]!=''){
                        echo "<tr class=".$class.">";

                            echo "<td><a href=Edit_Customer.php?c_id=".$row[c_id].">".$row[c_id]."</a></td>";
                            echo "<td><a href=Edit_Customer.php?c_id=".$row[c_id].">".$row[b_name]."</a></td>";
                            echo "<td><a href=Edit_Customer.php?c_id=".$row[c_id].">".$row[phone]."</a></td>";

                        echo "</tr>";

                    }

                    else{
                        echo "<tr class=".$class.">";

                            echo "<td><a href=Edit_Customer.php?c_id=".$row[c_id].">".$row[c_id]."</a></td>";
                            echo "<td><a href=Edit_Customer.php?c_id=".$row[c_id].">".$row[f_name]." ".$row[l_name]."</a></td>";
                            echo "<td><a href=Edit_Customer.php?c_id=".$row[c_id].">".$row[phone]."</a></td>";

                        echo "</tr>";

                    }


                }

            ?>      

        </table>

如果您的表格非常相似,可以執行此操作

就我而言,我有一個表test_a其中包含2列idname

(SELECT * FROM test_a a1) 
UNION ALL 
(SELECT * FROM test_a a2) 
ORDER BY name DESC

您的問題尚不完全清楚,但是您可以嘗試將其用作ORDER BY子句:

ORDER BY LEAST(first_col, second_col)

示范:

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

嘗試

ORDER BY CONCAT(b_name, l_name)

或(如果在EMPTY時您的字段為NULL)

ORDER BY COALESCE(b_name, l_name)

就像他們上面說的,UNION ALL是您的朋友,當然,如果您只有一張桌子,那么您始終可以這樣做:

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

因此,您要在同一張表中要求兩個不同的行,並按原樣對其進行排序。

感謝您的所有幫助,但是您的回答都沒有讓我對數據進行排序,並且在排序后將其正確地回顯到HTML表中。 一個UNION可能起作用了,但是我認為我的解決方案要想盡一切辦法都更快。

                $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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM