Ich habe eine Tabelle mit dem Namen 'tbl_featured_professional', in der folgende Felder aufgeführt sind:

id,
user_id,
ranking and 
score,
createdDate 

Was ich möchte, ist, dass die ersten 40 Datensätze nach Rangfolge sortiert werden (was einzigartig ist) und alle anderen Datensätze nach 40 nach Punktzahl geordnet sind. Ich möchte es von MySQL und nicht von PHP machen. Wie kann ich das machen? Dankeschön.

0
Jim Kasprowicz 19 Jän. 2019 im 16:24

4 Antworten

Beste Antwort

Wenn das Ranking - wie der Name schon sagt - eine Zahl ist, die bei 1 beginnt und sich erhöht, dann:

select fp.*
from tbl_featured_professional fp
order by (fp.ranking <= 40) desc,
         (case when fp.ranking <= 40 then ranking end),
         score;
0
Gordon Linoff 19 Jän. 2019 im 20:44

Überprüfen Sie meine Lösung

select * from 
(
  select * from tbl_featured_professional
  order by ranking
  limit 40
)
union all
select * from 
(
  select * from tbl_featured_professional
  order by score
  limit 9999999 offset 40
)
0
Derviş Kayımbaşıoğlu 19 Jän. 2019 im 13:28

Verwenden Sie 2 Unterabfragen und UNION.
Der 1. erhält die Top 40, die nach ranking
sortiert sind und der 2. ordnet die verbleibenden Zeilen um score neu:

SELECT * 
FROM tbl_featured_professional
ORDER BY ranking
LIMIT 40
UNION ALL
SELECT * FROM (
  SELECT * FROM (
    SELECT * FROM tbl_featured_professional
    ORDER BY ranking
    LIMIT 40, 18446744073709551615
  )
  ORDER BY score
)

18446744073709551615 = 2^64 - 1, siehe dies.

0
forpas 19 Jän. 2019 im 13:59

Die Verwendung mit 2 Unterabfragen zusammen mit UNION ALL und NOT IN sollte für Sie funktionieren. Bei der ersten Abfrage werden die 40 nach ranking geordneten Zeilen ausgewählt, bei der zweiten Abfrage mit Unterabfrage werden alle anderen Zeilen außer den ersten 40 Zeilen ausgewählt, die bereits bei der ersten Unterabfrage ausgewählt wurden und bestelle es mit score. Die UNION ALL-Klausel führt diese beiden Unterabfragedatensätze zu einem einzigen Satz zusammen. Hoffe das hilft und verständlich :) jetzt.

 SELECT * FROM tbl_featured_professional ORDER BY ranking LIMIT 40
 UNION ALL
 SELECT * FROM tbl_featured_professional WHERE id NOT IN (SELECT * FROM tbl_featured_professional ORDER BY ranking LIMIT 40) 
 ORDER BY score
0
Always Sunny 19 Jän. 2019 im 14:30