回答

收藏

MySQL按两列排序

技术问答 技术问答 474 人阅读 | 0 人回复 | 2023-09-14

我有一个像下面的表格3 P% F# s4 D3 v1 Z8 A/ n6 J

( o/ e% |4 u4 z2 p1 o# A! Y    CREATE TABLE Products(Product_id INT, ProductName VARCHAR(255),
* n7 K) b- J1 R                          Featured enum('Yes', 'No'), Priority enum('p1', 'p2', 'p3'))
' ^. e- |, W' O- M
! w: h4 B: X& e- j    INSERT INTO Products(ProductName, Featured, Priority) - s- O$ i/ M# p; ?7 Y
                  VALUES('Product A', 'Yes', 'p1'),
/ w" N" C/ d0 ]" ^& M9 L  [+ m                        ('Product B', 'No',  'p2'),5 V9 l0 @/ t4 f/ Z, j+ k, m/ y- C& w
                        ('Product C', 'Yes', 'p1'),
3 f( E5 z+ [( ^/ X' D/ J                        ('Product D', 'No',  'p1'),
0 P8 |8 Y0 g) h0 y                        ('Product E', 'Yes', 'p3'),& F- ?4 S- `' C/ U# `% ~# }
                        ('Product F', 'No',  'p2'),
6 M( X9 d& T1 E+ h, G# ~                        ('Product G', 'Yes', 'p1'),  z6 K6 W; ^  k% h
                        ('Product H', 'Yes', 'p2'),
2 I6 b/ w6 O4 U& U: r                        ('Product I', 'No',  'p2'),) f4 v) X+ `; s
                        ('Product J', 'Yes', 'p3'),
" {$ R' \/ a5 n% P" _2 V- F                        ('Product K', 'Yes', 'p1'),
' R7 _/ x% r* [                        ('Product L', 'No',  'p3');
2 {) M4 N* T& r) N  u. w; v3 L
( H8 _; k# @( q- Q: k我需要先获得特色产品,然后再选择优先级为p1,p2和p3的产品4 a8 v3 r! F3 E* x
Op:
% E4 L* h: a1 h# Y, u% D   ProdName | Featured  | Priority; L1 [% z1 T& E" ?
    Product A   Yes         p1
. f. {( A3 O6 ]; V; Q  D    Product C   Yes         p1* b# w! s1 ?! c
    Product G   Yes         p1
# X% P! l) g! u    Product K   Yes         p1
2 A" ^* k4 ?6 ]$ b    Product H   Yes         p2/ x; e) H. N0 K
    Product E   Yes         p3( V/ Z9 [  N4 C$ B0 u
    Product J   Yes         p3/ F# k( \: j, @8 r$ J- s* W
    Product D   No          p14 \, r% H/ |; _8 C/ l7 k
    Product B   No          p2' n% A8 M  e/ ]* N7 \- K
    Product F   No          p2$ g1 l& E% w  I$ |4 B! |: o- C& P% l
    Product I   No          p25 k1 D. }8 v- h. q/ Y$ s+ _
    Product L   No          p3
$ i6 U& L7 v! m+ t! S( ^
, |: k6 o( y) Q2 W7 {) @我写了一个查询,在下面是行不通的。6 v% Q5 G! r1 W, D* j9 Y
  SELECT * % V) l7 q5 @/ W' Q1 Y. p
    FROM Products
: Q2 N; R( G+ x' c3 U. x   ORDER BY Featured IN ('Yes') desc,9 U2 h) j( {( z' P. w& b3 m
            Priority IN ('p1', 'p2', 'p3') desc: d; j7 {8 v+ t8 F
  m' ^/ I  G3 T; G' I
你能在那发现错误吗8 H* `# ~) |8 e. u& M1 Z
                ' Y1 U$ w( F  g' C% T
解决方案:, g8 X7 a- b+ n- i# q! v9 b6 L
               
, I( `% y, O, M* b3 N
* V! y, C3 k, E; ~" A
/ G- a, Y6 u" \% N                试试这个
' H9 r/ T8 `! O1 R1 X; i) h, VSelect * from Products ORDER BY Featured, Priority
" ~% N' B6 g! ^- E6 o8 e3 j6 z如果您在mysql枚举上使用ORDER BY,则不会按字母顺序对其进行排序,而是会按其在枚举中的位置对其进行排序。2 ^  a3 `: w3 }1 z, p) F
如果要按照描述的字母顺序排序,请将枚举名称转换为这样的字符串! X0 n% Q4 ]/ N
Select * from Products ORDER BY  concat(Featured) desc , Priority
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则