2011-11-17 12 views
5

私のテーブルには、私がソートする必要がある2つの列があります。 content列のデータを持つものが最初になるように、これらの行を並べ替える必要があります。しかし、それらのトップ行はまた、(私が起こっていると仮定しないで、その内容によって)そのtitleによってアルファベット順にソートする必要があるため、そのcontent列の返さMySQLの順序が再び

ORDER BY content DESC, title ASC 

:私はこれを行うことができます。

アイデア?ありがとう。

更新:

titleがVARCHARで、contentがTEXTであることに注目している必要があります。だから任意のテキスト。 contentコンテンツがない場合は、列は空です。NULLではありません。

したがって、たとえば:

`title`  `content` 
title a 
title b  this has content 
title c  so does this 
title d 

順序は次のようになります。

title c 
title b 
title a 
title d 
+0

"データ"が含まれていない行にはどのようなものがありますか?ヌル ? – ManseUK

+0

**タイトル**の列は、同じデータとして**コンテンツ**列のみがアルファベット順にソートされています。そうでない場合は、最初に任意のものが**コンテンツ**の列に行く –

+1

あなたはあなたのデータの例を与えることができますまた、あなたがそれを並べ替えるようにすることができます... IMは混乱を引き起こす! – ManseUK

答えて

6

私はあなたが必要なものを理解していれば、この試してみてください。

SELECT * FROM your_table 
ORDER BY 
    CASE 
    WHEN content IS NULL THEN 1 
    ELSE 0 
    END 
    ,content,title 
+0

で更新しました。これで解決しました。ちょうどちょっと変わって= NULLに変更され、追加のコンテンツフィールドが削除されました。ありがとう – Ashley

1
ORDER BY (content='') DESC, title ASC 

または多分

を タイトル順にそう常に

ORDER BY title ASC,(content='') DESC 
が、コンテンツを持つものが最初のものである(タイトルが同じ場合)

0

どうcontentフィールドが最初の空であるかどうかをチェックするでしょうか?

ORDER BY if(content = '', 0, 1), content, title 

これは空でないコンテンツの行を最初に置きます。それはすべてあなたが達成したいことにかかっています。

編集:適宜、content = ''content IS nullに置き換えてください。