簡體   English   中英

MySQL按值排序列

[英]MySQL sort column by values

我想根據列值對數據庫結果進行排序。 我以為我需要這樣做:

SELECT * FROM products
ORDER BY FIELD(brand_id, 4, 1, 6)

但這根本不能對我的結果進行排序。 或者至少在某種程度上我不明白。

我想要實現的是我獲得所有產品,按brand_id排序。 首先使用brand_id 4,然后是1然后是6,然后是其余部分。

這是我在jsfiddle的例子。

如果沒有工作(這里jsfiddle工作不正常),請參閱下面的代碼:

架構:

CREATE TABLE `products` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `brand_id` int(10) unsigned NOT NULL,
  `price` decimal(8,2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

INSERT INTO `products` (`id`, `brand_id`, `price`)
VALUES
    (1, 1, 10.32),
    (2, 4, 15.32),
    (3, 2, 23.32),
    (4, 6, 56.32),
    (5, 4, 23.32),
    (6, 4, 23.32),
    (7, 1, 25.32),
    (8, 5, 15.32),
    (9, 3, 55.32),
    (10, 5, 23.32);

問題出在這里:

 FIELD(brand_id, 4, 1, 6)

如果brand_id中沒有brand_id則返回0,因此不存在的品牌將位於頂部。 你可以用這個:

ORDER BY FIELD(brand_id, 6, 1, 4) DESC

所有值的順序相反,然后您必須按DESC順序排序。

通常情況下,當您使用field()進行排序,你還可以in

SELECT p.*
FROM products p
WHERE brand_id IN (4, 1, 6)
ORDER BY FIELD(brand_id, 4, 1, 6);

然后它像廣告一樣工作。

您也可以采取更明確的方法,而不是反轉值:

SELECT p.*
FROM products p
ORDER BY brand_id IN (4, 1, 6) DESC,
         FIELD(brand_id, 4, 1, 6);

這個時間更長,但目的很明確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM