2017-08-15 1 views
1

Ich verwende diese Abfrage, um Zeilen aus admin Tabelle auszuwählen, wobei display_on_website Wert 1 in admin_meta Tabelle ist.SQL-Reihenfolge Zeilen in einer Tabelle nach Wert in einer anderen Tabelle

SELECT 
       a.sequence as sequence, 
       CONCAT(a.forename, ' ', a.surname) as name, 
       a.position as position 
      FROM 
       admin a, admin_meta am 
      WHERE 
       a.disabled = '' AND 
       a.sequence = am.user AND 
       am.field = 'display_on_website' AND 
       am.value = '1' 

Ich habe eine Reihe in admin_meta Tabelle für jeden Benutzer, die website_order ist - wie kann ich um diesen Wert zu bestellen?

+0

'ORDER BY am.website_order' ?? –

+1

Wer/was lehrt oder ermutigt nach all diesen Jahrzehnten immer noch diese schreckliche Komma-Join-Syntax? ("Schrecklich" ist keine Kritik an dir, nur die Syntax selbst.) – Uueerdo

+0

das funktioniert nicht, weil es eine andere SELECT-Abfrage sein wird, um diesen Wert für jeden Benutzer zu bekommen – charlie

Antwort

2

Sie müssen sich mit der admin_meta Tabelle zweimal verbinden, sobald die display_on_website Wert zu erhalten, und wieder den website_order Wert zu erhalten, um zu bestellen durch.

SELECT a.sequence, CONCAT(a.forename, ' ', a.surname) AS name, a.position 
FROM admin AS a 
JOIN admin_meta AS m1 on a.sequence = m1.user 
JOIN admin_meta AS m2 ON a.sequence = m2.user 
WHERE a.disabled = '' 
AND am1.field = 'display_on_website' AND am1.value = '1' 
AND am2.field = 'website_order' 
ORDER BY CAST(am2.value AS DECIMAL) 
+0

Da gehen Sie los die ganze Frage zu lesen und uns schlecht aussehen zu lassen. ;) – Uueerdo

Verwandte Themen