2016-08-01 18 views
-4

Ich vergleiche die Preise der Produkte von 3 andere Website. So habe ich 3 unterschiedliche Preise. Wenn die Website dieses Produkt nicht anbietet, ist der Preis leer.Mysql sortieren nach Anzahl der gefüllten Spalten

MySQL sieht wie folgt aus:

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

Ich möchte es von Produkten sortieren, die auf allen drei Websites zur Verfügung stehen. Zu Produkten, die auf nur einer Website verfügbar sind.

Und ich kann nicht herausfinden, wie man sich nähert!

+0

Verwenden Sie einfach ORDER BY price_1, price_2, price_3 –

+3

Es wäre viel einfacher, wenn die Datenstruktur sinnvoll normalisiert wäre. Dann könnten Sie einfach die Datensätze in der verknüpften Tabelle "ZÄHLEN" und nach der Anzahl sortieren. – David

+0

@antony Damit würden Produkte, die nur auf der ersten Website verfügbar sind, höher eingestuft als diejenigen, die bei der zweiten UND dritten Version verfügbar sind. – syck

Antwort

0

Wenn die leeren Felder NULL-Wert haben, Sie

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

Aber eine vernünftige Lösung wäre verwenden:

  • Sie haben eine Tabelle, die die Produkte enthält
  • Sie haben eine weitere Tabelle, die die Produkt-ID, den Preis und einen Wert enthält, der angibt, welche Website diesen Preis bereitgestellt hat.

Vorteile:

  • Sie haben nur die Einträge ein Produkt in der zweiten Tabelle zu COUNT(*), um herauszufinden, wie viele es
  • aufgeführt wird Sie die Anzahl der Websites, ohne jederzeit ändern kann, eine Wicke
+0

nicht DESC, ändern ASC – Rijin

+0

Dann hätten Sie diejenigen mit nur einem Eintrag zuerst. – syck

0

Try this:

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