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).