【发布时间】:2021-08-17 09:42:12
【问题描述】:
使用我的代码,我可以单独对所有列进行排序,但我确实遇到了一个问题,即除了第一列之外,数据没有按字母顺序/时间顺序排序。请看下面显示的内容,然后是我需要看的内容。
当前显示的内容(付款类型和日期未排序):
| Account | Payment type | Date | Amount |
|:--------|:------------:|:----------:|-------:|
| A001 | Rent | 2021-06-01 | 150.00 |
| A001 | Deposit | 2021-04-15 | 200.00 |
| A001 | Rent | 2021-05-02 | 150.00 |
| A002 | Deposit | 2021-06-20 | 220.00 |
| A003 | Rent | 2021-06-02 | 250.00 |
| A003 | Deposit | 2021-05-25 | 300.00 |
我想要显示的内容:
| Account | Payment type | Date | Amount |
|:--------|:------------:|:----------:|-------:|
| A001 | Deposit | 2021-04-15 | 200.00 |
| A001 | Rent | 2021-05-02 | 150.00 |
| A001 | Rent | 2021-06-01 | 150.00 |
| A002 | Deposit | 2021-06-20 | 220.00 |
| A003 | Deposit | 2021-05-25 | 300.00 |
| A003 | Rent | 2021-06-02 | 250.00 |
简而言之,我想首先按 Account 列(正确显示)然后按 Date 列对数据进行排序和显示。
我目前的代码(是的,我知道它对 sql 注入开放,我正在处理它;-)):
$orderBy = !empty($_GET["orderby"]) ? $_GET["orderby"] : "contracts_account_nr";
$order = !empty($_GET["order"]) ? $_GET["order"] : "asc";
$sql = "SELECT contract.contracts_account_nr, payment.rental_payment_type, payment.rental_payment_amount, payment.rental_payment_date FROM contracts contract RIGHT JOIN rental_payments payment ON contract.contracts_id = payment.contracts_id ORDER BY " . $orderBy . " " . $order;
$result = mysqli_query($con, $sql);
$contractOrder = "asc";
$typeOrder = "asc";
$dateOrder = "asc";
if($orderBy == "contract.contracts_account_nr" && $order == "asc") {
$contractOrder = "desc";
}
if($orderBy == "payment.rental_payment_type" && $order == "asc") {
$typeOrder = "desc";
}
if($orderBy == "payment.rental_payment_date" && $order == "asc") {
$dateOrder = "desc";
}
您的帮助将不胜感激!
【问题讨论】:
标签: php mysql sql-order-by