MySQL可以按column1进行排序,也可以按column2进行排序

问题描述 投票:0回答:1

假设我有2张桌子,coursesbooks

课程

| id | name         | is_sort_by_borrower |
|----|--------------|---------------------|
| 1  | Comp Science | 1                   |
| 2  | Biz Admin    | 0                   |
| 3  | Physics      | 1                   |

[books

| id  | title  | borrower | last_borrow_date | course_id |
| --- | ------ | -------- | ---------------- | --------- |
| 1   | Book A | 523      | 11/12/19 12:33   | 1         |
| 2   | Book B | 423      | 11/15/19 12:33   | 1         |
| 3   | Book C | 401      | 10/22/19 12:33   | 1         |

[课程中有一列is_sort_by_borrower,我想得到这样的结果

| course | book_title | borrower | last_borrow_date | is_sort_by_borrower | |--------------|------------|----------|------------------|---------------------| | Comp Science | Book A | 523 | 11/12/19 12:33 | 1 | | Comp Science | Book B | 423 | 11/15/19 12:33 | 1 | | Comp Science | Book C | 401 | 10/22/19 12:33 | 1 | | Comp Science | Book D | 377 | 11/19/19 12:33 | 1 | | Biz Admin | Book E | 122 | 11/20/19 12:33 | 0 | | Biz Admin | Book F | 419 | 11/12/19 12:33 | 0 | | Biz Admin | Book G | 65 | 10/18/19 12:33 | 0 | | Physics | Book H | 446 | 8/31/19 12:33 | 1 | | Physics | Book I | 398 | 11/2/19 12:33 | 1 | | Physics | Book J | 376 | 9/30/19 12:33 | 1 | | Physics | Book K | 249 | 10/11/19 12:33 | 1 |
是否可以按borrower排序结果,按last_borrow_date排序结果?
mysql sorting
1个回答
0
投票
是,在SELECT中创建另一列,并使用CASE向其中填充所需的值,然后按此排序。您还可以在WHERE子句中使用CASE语句,具体取决于您是否希望排序列显示结果。

ref:MYSQL ORDER BY CASE Issue

ref:https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html

在您的示例中:

SELECT c.id, c.name, c.is_sort_by_borrower, b.id, b.title, b.borrower, b.last_borrow_date FROM courses c INNER JOIN books b on b.course_id = c.id ORDER BY CASE WHEN is_sort_by_borrower=1 THEN borrower WHEN is_sort_by_borrower=0 THEN last_borrow_date END ASC

© www.soinside.com 2019 - 2024. All rights reserved.