2016-08-01 14 views
-4

3異なるWebサイトの製品の価格を比較しています。だから私は3異なる価格があります。ウェブサイトがその製品を提供していない場合、価格は空です。Mysql sort BY列数

**id | name | price_1 | price_2 | price 3** 

私はすべての3つのウェブサイトで入手可能な製品、からそれを並べ替えしたいと思います:

MySQLは次のようになります。製品には、ただ1つのWebサイトで利用可能です。

私はこれにアプローチする方法を理解できません!

空のフィールドがNULL値を持っている場合は、あなたが

SELECT * FROM sometable ORDER BY ISNULL(price_1) + ISNULL(price_2) + ISNULL(price_3) DESC; 

を使用することができます

+0

ORDER BY price_1、price_2、price_3を使用してください –

+3

データ構造が分かりやすく正規化されていればもっと簡単になります。次に、結合されたテーブルのレコードを 'COUNTするだけで、カウントでソートすることができます。 – David

+0

@antonyそれは、最初のウェブサイトでのみ利用可能な製品を、2番目と3番目に利用可能な製品よりも高いランク付けにします。 – syck

答えて

0

しかし、もっと賢明な解決策は次のようになります。

  • あなたが持っている製品
  • が含まれている一つのテーブルを持っています別の テーブル。製品のID、価格、および値を含む が含まれています。

利点:

  • はあなただけ
  • あなたはいつでも無しウェブサイトの数を変更することができます表示されてどのように多くの上を見つけるために、第2のテーブルにCOUNT(*)に製品のエントリを持っていますテーブルを変更することは
+0

DESCではなく、ASCを変更してください – Rijin

+0

最初にエントリが1つしかないものがあります。 – syck

0

これを試してみてください:

SELECT *, (IF(price_1 IS NULL,0,1) + IF(price_2 IS NULL,0,1) + IF(price_3 IS NULL,0,1)) AS odr FROM `test1` ORDER BY odr DESC