Je ne dis pas que c'est la meilleure façon de procéder, mais c'est la moindre modification à vos tentatives existantes.
(
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
En fait, je ne suis pas sûr que vous puissiez fusionner les deux premières requêtes syndiquées et obtenir les mêmes résultats. Dans la requête d'origine, avec UNION DISTINCT
et le calcul séparé du rang dans l'original, les enregistrements qui satisfont le aye IN ("10")
les critères apparaîtront probablement souvent deux fois (mais avec des valeurs de classement différentes).