Saya tidak mengatakan ini adalah cara terbaik untuk melakukan sesuatu, tetapi ini adalah modifikasi paling sedikit untuk upaya Anda yang ada.
(
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
Sebenarnya, saya tidak yakin Anda dapat menggabungkan dua kueri gabungan pertama dan mendapatkan hasil yang sama. Dalam kueri asli, dengan UNION DISTINCT
dan perhitungan peringkat terpisah dalam aslinya, catatan yang memenuhi aye IN ("10")
kriteria mungkin akan sering muncul dua kali (tetapi dengan nilai peringkat yang berbeda).