3

次の構造を持つ製品テーブルがあります。

   ProductID     ProductName     ProductType
   1             Irrigation      1  
   2             Landscape       2  
   3             Sleeving        3  
   4             Planting        4  

ここで、製品タイプ 3,2,4,1 の順に行を返す必要があります。このために、このように正常に動作する MYSQL FIELD メソッドを使用しました。

   Select * from product order by FIELD(producttype,3,2,4,1)

これはうまくいっています、

私の問題は、producttype 3 の productname が空の場合、空ではない次の productname を取得する必要があるため、そのような場合、結果の順序は 2,4,1,3 になるはずです。

したがって、最初の条件は、レコードが次の製品タイプの順序である必要があることです

Sleeving      3
Landscape     2
Planting      4
Irrigation    1                

ただし、producttype 3 の Productname が空の場合、注文は

Landscape     2
Planting      4
Irrigation    1
              3

さらに、producttype 2 の Productname が空である場合、注文は

Planting      4
Irrigation    1
              3
              2

この結果から、最初のレコードを選択するだけです。

私は私のポイントを明確に願っています

どんな助けでもいただければ幸いです

4

5 に答える 5

0

動作するはずです!

 SELECT * FROM product ORDER BY FIELD(IF(ProductName is null,0,producttype),1,3,2,5)
于 2013-07-22T07:24:21.480 に答える
0

これは次の仕様を満たします。

ORDER BY NULLIF(ProductName,'') IS NULL, FIELD(producttype,3,2,4,1)

最初の式は、ProductName が「空」(NULL または長さゼロの文字列) の場合は 1 を返し、それ以外の場合は 0 を返します。

したがって、これは空でないすべての ProductName を最初に並べ替え、次に空の ProductName を並べ替えます。

そして、元の表現でソートします。

この方法では、2 つ以上 (またはすべて) の空の ProductName がある場合、最初に指定された順序が維持されることに注意してください。

(「空」のテストは、TRIM() 関数を使用するなど、他のケースを含めるように拡張できます。


表現

NULLIF(ProductName,'') IS NULL

は省略形であり、SQL-92 準拠と同等です。

CASE WHEN ProductName = '' OR ProductName IS NULL THEN 1 ELSE 0 END 

(そして、同じ結果を得る他の方法があります。)

于 2013-07-22T07:23:09.843 に答える
-1

あなたはこれを試すことができます

Select * from product where ProductName!='' order by FIELD(producttype,3,2,4,1)

于 2013-07-22T07:31:59.963 に答える