Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi l'ordre extérieur ne fonctionne-t-il pas correctement ?

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