sql >> Databáze >  >> RDS >> Mysql

Proč vnější pořadí podle nefunguje správně?

Neříkám, že je to nejlepší způsob, jak věci řešit, ale je to nejmenší modifikace vašich stávajících pokusů.

(
  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

Ve skutečnosti si nejsem jistý, že můžete sloučit první dva spojené dotazy a získat stejné výsledky. V původním dotazu s UNION DISTINCT a samostatný výpočet pořadí v originále, záznamy, které splňují aye IN ("10") kritéria se pravděpodobně často objeví dvakrát (ale s různými hodnotami pořadí).




  1. Jak vybrat záznamy bez hodnot NULL v MySQL

  2. json_encode změní pole na objekt

  3. Jak nahradit část řetězce v SQL

  4. poddotaz ve FROM musí mít alias