2016-08-06 41 views
0

MYSQL Rookie hier, also bitte bitte mit mir.Reihenfolge mysql Tabelle Zeilen nach Wert von Spalte

Ich habe eine Tabelle namens Cars, die Daten über Autos speichert:

  • Machen
  • Modell
  • MPG
  • Preis
  • Anzahl der Sitze

Und ich habe eine Tabelle mit der Bezeichnung priority, die sto Res, wie wichtig jedes Automerkmal für mich auf einer 0-5 Skala ist. So könnte diese Tabelle wie folgt aussehen:

+-----+-------+-------+ | MPG | Price | Seats | +-----+-------+-------+ | 0 | 2 | 3 | +-----+-------+-------+

Ich möchte eine Punktzahl zu erzeugen in der Lage sein für jeden Car wie folgt:

score = (car.MPG * priority.MPG) + (car.Price * priority.Price) + (car.seats * priority.seats)

Ich möchte im Wesentlichen eine Select * from cars order by score tun. Aber ich bin nicht sicher, wie man diese Abfrage bildet.

Hilfe wird sehr geschätzt.

Antwort

1

Try

select a.* from cars a, priority b order by ((a.mpg* b.mpg)+(a.price*b.price)+(a.seats*b.seats)) 
+0

Dies funktioniert gut zu verwenden. Ich habe mich gefragt, ob mein Bewertungssystem komplizierter wird, gibt es eine Möglichkeit, es als eine Funktion zu speichern und es einfach irgendwie zu nennen? – user3509258

+1

Ja ... Sie können eine Funktion erstellen CREATE FUNCTION 'score' (Ihre Parameter ... (mpg..price ... Sitze ...)) RETURNS INT Ihr Scoring-System BEGIN ... RETURNS der Wert .. END; ... und ihre Anfrage wird diese Funktion aufrufen .. a select * from Autos ein, um nach Punkten (a.mpg, a.price, a.seats) – Christian

+0

viel Glück mit. dieser Vorschlag – Christian

0

Sie müssen die Hauptauswahl in eine andere Auswahl umbrechen, die die Bestellklausel enthält. Etwas wie folgt aus:

SELECT * FROM (SELECT c.*, ((c.MPG * priority.MPG) + (c.Price * priority.Price) + (c.seats * priority.seats)) AS score FROM cars) x ORDER BY x.score