Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum funktioniert die äußere Sortierung nach nicht richtig?

Ich sage nicht, dass dies der beste Weg ist, die Dinge anzugehen, aber es ist die geringste Änderung Ihrer bestehenden Versuche.

(
  SELECT IF(aye IN ("10"), 0, 1) AS sortGroup
     , IF(aye IN ("10"), @rank := @rank + 3, @rank1 := @rank1 + 3) AS `rank`
     , id, subject, name
  FROM quran
     , (select @rank := -2) AS rq, (select @rank1 := -1) AS r1q  
  WHERE MATCH (subject, name) AGAINST ('anything') 
)
UNION ALL
(
  SELECT 2 AS sortGroup
     , @rank2 := @rank2 + 2 `rank`
     , id, subject, byA
  FROM hadith
     , (select @rank2 := 0) AS q 
  WHERE MATCH (subject) AGAINST ('anything')
)
ORDER BY sortGroup, rank 
LIMIT 0, 11

Eigentlich bin ich mir nicht sicher, ob Sie die ersten beiden vereinten Abfragen zusammenführen und die gleichen Ergebnisse erzielen können. In der ursprünglichen Abfrage mit UNION DISTINCT und die getrennte Rangberechnung im Original, Datensätze, die aye IN ("10") erfüllen Kriterien werden wahrscheinlich oft doppelt vorkommen (aber mit unterschiedlichen Rangwerten).