Не казвам, че това е най-добрият начин да се справите, но това е най-малката промяна в съществуващите ви опити.
(
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
Всъщност не съм сигурен, че можете да обедините първите две обединени заявки и да получите същите резултати. В оригиналната заявка с UNION DISTINCT
и отделното изчисляване на ранга в оригинала, записи, които отговарят на aye IN ("10")
критериите вероятно често ще се появяват два пъти (но с различни стойности на ранг).