Сортировать строки по column1 или column2 по значению в другом столбце - PullRequest
0 голосов
/ 21 ноября 2019

Допустим, у меня есть 2 таблицы:

курсы

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

книги

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

1 Ответ

1 голос
/ 21 ноября 2019

Да, создайте еще один столбец в SELECT и используйте CASE, чтобы заполнить его нужным значением, а затем отсортируйте по нему. Вы также можете использовать оператор CASE в предложении WHERE, в зависимости от того, хотите ли вы в столбце сортировки показывать результат или нет.

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