以下是您提供的文本的繁體中文翻譯:

Node.js - MySQL Order By

# Node.js - MySQL 排序

你好,有志者們!今天,我們將深入一個令人興奮的課題,幫助你像專家一樣組織你的數據。想像你在試圖整理你的書架 - 这正是我們將在Node.js中使用MySQL的"ORDER BY"子句對數據庫進行操作。讓我們開始吧!

## 了解基礎知識

在我們跳進代碼之前,讓我們先了解"ORDER BY"是如何工作的。簡單來說,它就像是你數據的魔法排序帽子。它允許你將數據庫的結果按照特定的順序排列,可以是升序(A到Z,1到100)或降序(Z到A,100到1)。

### Why is ORDER BY important?

想像你正在經營一家網上書店。你的客戶可能會喜歡書籍按價格、作者名稱或出版日期排序。這正是ORDER BY出來救援的地方!

## 設置我們的環境

首先,讓我們確保我們有需要的東西:

1. 在你的電腦上安裝Node.js
2. 設置MySQL數據庫
3. 安裝Node.js的MySQL模塊

如果你還沒有安裝MySQL模塊,打開你的終端並輸入:

npm install mysql


## 連接到我們的數據庫

讓我們從連接到數據庫開始。以下是一個簡單的腚本:

```javascript
const mysql = require('mysql');

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'your_username',
  password: 'your_password',
  database: 'your_database_name'
});

connection.connect((err) => {
  if (err) {
    console.error('連接數據庫時發生錯誤:' + err.stack);
    return;
  }
  console.log('已連接到數據庫。');
});

記得將'your_username'、'your_password'和'your_database_name'替換為你的實際MySQL憑據。

基本的ORDER BY範例

現在,讓我們假設我們的數據庫中有一個名為'books'的表。我們想要檢索所有書籍並按其標題排序。以下是如何操作的:

connection.query(
  'SELECT * FROM books ORDER BY title',
  (error, results, fields) => {
    if (error) throw error;
    console.log('按標題排序的書籍:');
    console.log(results);
  }
);

在這個範例中,我們選擇'books'表中的所有列(*)並按' title'列排序。默認情況下,ORDER BY按升序排序。

降序排序

如果我們想要從Z到A排序我們的書籍呢?簡單!我們只需在我們的列名後面加上'DESC':

connection.query(
  'SELECT * FROM books ORDER BY title DESC',
  (error, results, fields) => {
    if (error) throw error;
    console.log('按標題降序排序的書籍:');
    console.log(results);
  }
);

多列排序

現在,讓我們來看看真正有趣的部分。如果我們想要首先按作者名稱排序,然後按標題排序我們的書籍呢?ORDER BY也可以做到:

connection.query(
  'SELECT * FROM books ORDER BY author, title',
  (error, results, fields) => {
    if (error) throw error;
    console.log('按作者名稱排序,然後按標題排序的書籍:');
    console.log(results);
  }
);

這個查詢首先會按作者名稱對書籍進行排序。如果兩本書有相同的作者,它會然後按標題對它們進行排序。

交錯升降序

我們甚至可以在多列排序中交錯使用升序和降序:

connection.query(
  'SELECT * FROM books ORDER BY author DESC, title ASC',
  (error, results, fields) => {
    if (error) throw error;
    console.log('按作者(降序)和標題(升序)排序的書籍:');
    console.log(results);
  }
);

這將按作者名稱降序對書籍進行排序,然後按標題升序對它們進行排序。

按列位置排序

你知道你也可以按列位置排序嗎?這是真的!你可以使用表示列在你SELECT語句中位置的數字:

connection.query(
  'SELECT id, title, author FROM books ORDER BY 3, 2',
  (error, results, fields) => {
    if (error) throw error;
    console.log('按作者(第三列)排序,然後按標題(第二列)排序的書籍:');
    console.log(results);
  }
);

在這個範例中,'3'指的是'author'列,'2'指的是'title'列。

實際範例:書店庫存系統

讓我們將所有這些知識結合起來,放在一個實際的範例中。想像我們正在為我們的書店創建一個庫存系統:

const mysql = require('mysql');

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'your_username',
  password: 'your_password',
  database: 'bookstore'
});

connection.connect((err) => {
  if (err) {
    console.error('連接數據庫時發生錯誤:' + err.stack);
    return;
  }
  console.log('已連接到書店數據庫。');

  // 檢索所有書籍,按作者和標題排序
  connection.query(
    'SELECT * FROM books ORDER BY author, title',
    (error, results, fields) => {
      if (error) throw error;
      console.log('所有書籍,按作者和標題排序:');
      console.log(results);
    }
  );

  // 檢索最貴的10本書
  connection.query(
    'SELECT * FROM books ORDER BY price DESC LIMIT 10',
    (error, results, fields) => {
      if (error) throw error;
      console.log('最貴的10本書:');
      console.log(results);
    }
  );

  // 檢索去年以來出版的書籍,按出版日期排序
  connection.query(
    'SELECT * FROM books WHERE publication_date >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR) ORDER BY publication_date DESC',
    (error, results, fields) => {
      if (error) throw error;
      console.log('去年以來出版的書籍,按日期排序:');
      console.log(results);
    }
  );

  connection.end();
});

這個腚本連接到我們的書店數據庫並執行三個查詢:

  1. 它檢索所有書籍,按作者和標題排序。
  2. 它獲取最貴的10本書。
  3. 它找到去年以來出版的所有書籍,按出版日期排序。

結論

就是这样,各位!你剛剛學會了如何在Node.js中使用MySQL的ORDER BY。記住,組織你的數據就像整理你的書架一樣 - 它使一切更容易找到,並且更愉快地查看。

以下是我們討論過的ORDER BY方法的快速參考表:

方法 描述 範例
基本的ORDER BY 按升序排序 ORDER BY column_name
降序ORDER BY 按降序排序 ORDER BY column_name DESC
多列ORDER BY 按多列排序 ORDER BY column1, column2
交錯ORDER BY 交錯使用升降序 ORDER BY column1 DESC, column2 ASC
按位置ORDER BY 按列位置排序 ORDER BY 1, 2

練習這些概念,在自 己的數據庫中進行實驗,很快你將像專家一樣排序數據!快樂編程!

Credits: Image by storyset