sql >> Databasteknik >  >> RDS >> Mysql

Varför fungerar inte yttre ordning efter korrekt?

Jag säger inte att detta är det bästa sättet att gå tillväga, men det är den minsta modifieringen av dina befintliga försök.

(
  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

Jag är faktiskt inte säker på att du kan slå samman de två första förenade frågorna och få samma resultat. I den ursprungliga frågan, med UNION DISTINCT och den separata beräkningen av rang i originalet, poster som uppfyller aye IN ("10") kriterier kommer förmodligen ofta att dyka upp två gånger (men med olika rangvärden).




  1. Hur skickar man ett argument till ett PL/SQL-block i en sql-fil som heter med START i sqlplus?

  2. Infoga 2 miljoner rader i SQL Server snabbt

  3. SQL Gå med i samma tabell baserat på tidsstämpel och lagernivå

  4. Ändra utdataformat för MySQL kommandoradsresultat till CSV