Ik zeg niet dat dit de beste manier is om dingen aan te pakken, maar het is de minste wijziging van je bestaande pogingen.
(
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
Eigenlijk ben ik er niet zeker van dat je de eerste twee samengevoegde zoekopdrachten kunt samenvoegen en dezelfde resultaten kunt krijgen. In de oorspronkelijke zoekopdracht, met UNION DISTINCT
en de afzonderlijke berekening van rang in het origineel, records die voldoen aan de aye IN ("10")
criteria zullen waarschijnlijk vaak twee keer voorkomen (maar met verschillende rangordewaarden).