Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 根据另一列中的值按列1或列2对行进行排序_Mysql_Sql_Sorting_Sql Order By - Fatal编程技术网

Mysql 根据另一列中的值按列1或列2对行进行排序

Mysql 根据另一列中的值按列1或列2对行进行排序,mysql,sql,sorting,sql-order-by,Mysql,Sql,Sorting,Sql Order By,假设我有两张桌子: 课程 | id | name | is_sort_by_borrower | |----|--------------|---------------------| | 1 | Comp Science | 1 | | 2 | Biz Admin | 0 | | 3 | Physics | 1 | | id | title |

假设我有两张桌子:

课程

| 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         |
书籍

| 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         |
课程中有一列
是按借款人排序的,我想得到这样的结果

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

是否可以按
借用者
对结果进行排序,有些按
上次借用日期
对结果进行排序?

是的,在“选择并使用”用例中创建另一列以填充所需的值,然后按该值进行排序。您还可以在WHERE子句中使用CASE语句,具体取决于您是否希望排序列显示结果

参考:

参考:

在您的示例中:

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

是的,在选择和用例中创建另一列,用您想要的值填充它,然后按该值排序。您还可以在WHERE子句中使用CASE语句,具体取决于您是否希望排序列显示结果

参考:

参考:

在您的示例中:

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

ORDER BY
需要如下所示:

ORDER BY course -- courses grouped together
       , CASE WHEN is_sort_by_borrower = 1 THEN borrower END DESC
       , CASE WHEN is_sort_by_borrower = 0 THEN last_borrow_date END DESC

根据排序标志,给定课程的两列中正好有一列为空。不能在同一列中组合这两种数据类型,否则结果将不可预测。

排序依据需要如下所示:

ORDER BY course -- courses grouped together
       , CASE WHEN is_sort_by_borrower = 1 THEN borrower END DESC
       , CASE WHEN is_sort_by_borrower = 0 THEN last_borrow_date END DESC

根据排序标志,给定课程的两列中正好有一列为空。您不能在同一列中组合这两种数据类型,否则结果将无法预测。

谢谢。它起作用了。如果我希望
borrower
是DESC,而
last\u borrow\u date
是ASC,该怎么办?例如,当您在一列中混合数据类型时,MySQL可能会将所有以
11/
开头的日期视为相等。我还没有测试过这个,谢谢。它起作用了。如果我希望
borrower
是DESC,而
last\u borrow\u date
是ASC,该怎么办?例如,当您在一列中混合数据类型时,MySQL可能会将所有以
11/
开头的日期视为相等。但我还没有测试过这个。