問題のSQLの並べ替えが発生し、sqlzooをやって、彼は個々の行はクエリ結果の先頭に配置することができます資格、または尾の結果
メソッド内のステートメントは、(また、IF文で)です
これは、すべての目次であるように私は、テストを持っていたと思います
IF文を使用してフィットBY ORDER
例えば、私はヘビの種に行数は、別途記載されていると思うので、私は問い合わせることができます
(0,1、種= '蛇')もしBYペットORDER SELECT * FROM、種;
結果は以下の通りであります
私たちは、ヘビの種のための行数は、強制的にクエリ結果の先頭に置かれたことがわかります
これはそれを行う方法ですか?
それは注意する必要があります。
IF(種= '蛇'、0,1)種;
これが意味するI種の種、種はに接続しながら、ということである隠し属性、隠し属性が可能0または1
それは何を意味するのでしょうか?すなわち、優先度が種ヘビかどうかを決定することである種の一種であり、そうである場合、返されない場合は、リターン0 1。
次に、実行するために種を属性隠された一種の、隠し属性の撮影の後、その後、残りの種を並べ替えます
言い換えれば、あなたは別の列と見られ、この文を、置くことができる場合
私たちは蛇にの結果に行の末尾をしたい場合は?
その後、SELECT IF(種= '蛇'、0、1)BY ORDER * PETからの書き込みができDESC、種を。
いくつかは、上記に述べたように、あなたは別の列とif文を置くことができ、あなたも彼のためにASCまたはDESCのソート条件を追加することができますので、もちろん、デフォルトはASCで、書き込むことはできません。
したがって、最初のステップは、クエリに相当するクエリ0,1隠し属性、次いでDESCソート種=ヘビ戻り値は0、それは最終的にランクされている逆の順序であるからです
だから、あなたが同時に隠し属性の優先順位付けを行っている、一種の残りのために、あなたはまた、さらにソートのASCまたはDESC、ないスクリーンショットすることができます。
文の順にして使用します
上記単一の条件は、リターン0または1満たされ、あなたはそれの範囲を使用する必要がある場合に?あなたは、INステートメントを使用することができます
次のような、私は誕生日や行1993年2月4日1989年5月13日の数、および最後の行を尋ねました
BYペットORDER SELECT * FROM 誕生INに( '1993年2月4日'、 '1989年5月13日')、誕生。
この場合、のINステートメント裁判官の誕生、出産条件が満たされた場合、リターンが満たされていない、0を返します。
戻り値が1、ASCをソートするための時間であるので、したがって、2つのラインの状態は、それが最終的に配置されています。
================================================== ======================================
照会アクセス・条件によってオーダー
适用场景,如表tab_a 有三个字段,
如果field1非空则按升序排列,
如果field1是空再排field2,
如果 field2非空升序排列,
如果field2是空再排field3,
如果field3非空则升序排列,
如果field3是空。。。。。。。。
例子1 排序boolean类型
CREATE TABLE `tab_b` (
`field` varchar(255) default NULL,
`id` int(11) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `tab_b` VALUES ('1', 'ture');
INSERT INTO `tab_b` VALUES ('2', 'ture');
INSERT INTO `tab_b` VALUES ('3', 'false');
INSERT INTO `tab_b` VALUES ('4', 'false');
SELECT * from TAB_B ORDER BY field='true' desc
注意:ORDER by 后接的字段如果是boolean属性,则false比ture ‘大’!!!!!
########################################################
DROP TABLE IF EXISTS `tab_a`;
CREATE TABLE `tab_a` (
`id` int(11) NOT NULL,
`field3` int(11) default NULL,
`field2` int(11) default NULL,
`field1` int(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `tab_a` VALUES ('1', '1', '1', '1');
INSERT INTO `tab_a` VALUES ('2', '2', '2', '2');
INSERT INTO `tab_a` VALUES ('3', '3', '3', null);
INSERT INTO `tab_a` VALUES ('4', '4', null, null);
INSERT INTO `tab_a` VALUES ('5', '5', '5', null);
INSERT INTO `tab_a` VALUES ('6', null, null, null);
INSERT INTO `tab_a` VALUES ('7', null, null, null);
INSERT INTO `tab_a` VALUES ('8', '8', null, null);
SELECT * FROM TAB_A ORDER BY
field1='' desc , field1 asc,
field2='' desc , field2 asc,
field3='' desc ,field3 asc
此处field1='' 可以看成boolean排序 desc 排序,field1=''为真的排在下面(因为看上面"注意"),否则排在上面(即field1!='');
而后面的field1 asc相当于排序field1!=''数据,依次排序field2,field3..........
---------------------
作者:changliangwl
来源:CSDN
原文:https://blog.csdn.net/changliangwl/article/details/42777551
版权声明:本文为博主原创文章,转载请附上博文链接!