根据多列对结果行进行排序
Order the resulting rows based on multiple columns
我必须记下具有两个值 = 0 的不同字段的行
我解释一下,所有有stock_it=0
和stock_eu=0
的记录都必须放在结果的底部
我已经使用了这个解决方案,但是,它并不严格正确,因为它甚至放下了两个值都不为 0 的行
$dati = mysql_query("
SELECT *
FROM $tb_article
ORDER BY
FIELD($tb_art.article_status,'n') DESC,
FIELD($tb_art.article_stock_it,'0') ASC,
FIELD($tb_art.article_stock_eu,'0') ASC,
$tb_art.article_rank
");
article_status=n
表示新产品,必须保持在顶部!
- 将所有有库存 IT 和库存 EU = 0 的文章推到底部(产品不可用)
- 最后,按照分配的排名对其余文章进行排序
你可以在ORDER BY
中使用CASE
语句,像这样:
SELECT *
FROM $tb_article
ORDER BY
CASE WHEN article_status = 'n' THEN 0
WHEN article_stock_it = 0 THEN 100000
WHEN article_stock_eu = 0 THEN 100000
ELSE article_rank
END
如果您想使用 ORDER BY FIELD :
SQL Fiddle
MySQL 5.6 架构设置:
CREATE TABLE tb_article
(
article_stock_it int,
article_stock_eu int,
article_status varchar(11),
article_rank int
);
INSERT INTO tb_article VALUES
(1, 1, 'n', 1)
, (0, 1, 'n', 1)
, (0, 0, 'n', 1)
, (1, 1, 'o', 1)
, (1, 1, 'o', 2);
查询 1:
SELECT *
FROM tb_article
ORDER BY
FIELD(tb_article.article_status,'n') DESC,
FIELD(
IF(tb_article.article_stock_it = 0 AND tb_article.article_stock_eu = 0,'1','0')
,'0') DESC,
tb_article.article_rank
| article_stock_it | article_stock_eu | article_status | article_rank |
|------------------|------------------|----------------|--------------|
| 1 | 1 | n | 1 |
| 0 | 1 | n | 1 |
| 0 | 0 | n | 1 |
| 1 | 1 | o | 1 |
| 1 | 1 | o | 2 |
我必须记下具有两个值 = 0 的不同字段的行
我解释一下,所有有stock_it=0
和stock_eu=0
的记录都必须放在结果的底部
我已经使用了这个解决方案,但是,它并不严格正确,因为它甚至放下了两个值都不为 0 的行
$dati = mysql_query("
SELECT *
FROM $tb_article
ORDER BY
FIELD($tb_art.article_status,'n') DESC,
FIELD($tb_art.article_stock_it,'0') ASC,
FIELD($tb_art.article_stock_eu,'0') ASC,
$tb_art.article_rank
");
article_status=n
表示新产品,必须保持在顶部!- 将所有有库存 IT 和库存 EU = 0 的文章推到底部(产品不可用)
- 最后,按照分配的排名对其余文章进行排序
你可以在ORDER BY
中使用CASE
语句,像这样:
SELECT *
FROM $tb_article
ORDER BY
CASE WHEN article_status = 'n' THEN 0
WHEN article_stock_it = 0 THEN 100000
WHEN article_stock_eu = 0 THEN 100000
ELSE article_rank
END
如果您想使用 ORDER BY FIELD : SQL Fiddle
MySQL 5.6 架构设置:
CREATE TABLE tb_article
(
article_stock_it int,
article_stock_eu int,
article_status varchar(11),
article_rank int
);
INSERT INTO tb_article VALUES
(1, 1, 'n', 1)
, (0, 1, 'n', 1)
, (0, 0, 'n', 1)
, (1, 1, 'o', 1)
, (1, 1, 'o', 2);
查询 1:
SELECT *
FROM tb_article
ORDER BY
FIELD(tb_article.article_status,'n') DESC,
FIELD(
IF(tb_article.article_stock_it = 0 AND tb_article.article_stock_eu = 0,'1','0')
,'0') DESC,
tb_article.article_rank
| article_stock_it | article_stock_eu | article_status | article_rank |
|------------------|------------------|----------------|--------------|
| 1 | 1 | n | 1 |
| 0 | 1 | n | 1 |
| 0 | 0 | n | 1 |
| 1 | 1 | o | 1 |
| 1 | 1 | o | 2 |