3

重複の可能性:
PHP MYSQL ORDER BYに「IF」ステートメントを追加できますか?

MySQLでORDERにIF条件を使用するにはどうすればよいですか?

たとえば、エラーを返す以下のクエリは、

SELECT *
FROM page AS p

WHERE p.parent_id != p.page_id
AND p.type = 'post'
AND p.parent_id = '7'


IF(
    'date created' = 'date created', 
    ORDER BY p.created_on DESC,
    ORDER BY p.created_on ASC
)

メッセージ、

1064-SQL構文にエラーがあります。'IF(' date created'=' date created'、ORDER BY p.created_on DESC、ORDER BYp。'の17行目付近で使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

最初の「作成日」は可変です。したがって'date created' = 'date created'

それからORDER BY p.created_on DESC

そうしないとORDER BY p.created_on ASC

4

1 に答える 1

6

これを使って:

create table person
(
  name varchar(50)
);


insert into person(name)
select 'John' union
select 'Paul' union
select 'George' union
select 'Ringo' ;



set @direction = 1;

-- the '' is ignored on sorting since they are all the same values
select * from person
order by 
    IF (@direction = 0, name,'') ASC,
    IF (@direction = 1, name,'') DESC

ライブ テスト: http://www.sqlfiddle.com/#!2/22ea1/1

もう 1 つの方法は、降順の場合は -1、昇順の場合は +1 を使用し、それをフィールドに掛けて、数値フィールドでのみ機能することです。

create table person
(
  name varchar(50), birth_year int
  );


insert into person(name, birth_year)
select 'John', 1940 union
select 'Paul', 1941 union
select 'George', 1943 union
select 'Ringo', 1940 ;


set @direction = -1;  -- -1: descending, 1: ascending

select * from person
order by birth_year * @direction

ライブ テスト: http://www.sqlfiddle.com/#!2/f78f3/3

于 2012-04-19T01:56:35.957 に答える