sql >> Database teknologi >  >> RDS >> Mysql

Hvordan bestiller jeg valgte rækker alternativt

Prøv venligst denne forespørgsel nedenfor. Bruger ROW_NUMBER() OVER(PARTITION BY ..) generere et rang-/rekordnummer for hver 'which' varer og sorter ud fra dette. (Håber dette vil virke for dig, jeg har ikke tabelskemaet eller eksempeldatascriptet til at prøve selv)

SELECT
  pr1.id AS user_id,
  pr1.title AS user_name,
  pr2.id AS liker_id,
  pr2.title AS liker_name,
  x.which AS which_table,
  x.cnt AS total
FROM 
(
  SELECT rid, rootid, which, COUNT(*) AS cnt
        ,ROW_NUMBER() OVER(PARTITION  BY which ORDER BY rid) AS new_order
  FROM
  (
    SELECT rid, rootid, 'vote' which FROM p_likes
    UNION ALL 
    SELECT rid, rootid, 'comment' which FROM p_comments
    UNION ALL 
    SELECT rid, rootid, 'friend' which FROM relations
  ) y
  WHERE y.rootid = 1246 AND y.rootid <> y.rid
  GROUP BY y.rid, y.rootid, y.which
) x
INNER JOIN pagesroot pr1 on x.rootid = pr1.id
INNER JOIN pagesroot pr2 on x.rid = pr2.id
ORDER BY new_order,x.cnt desc;


  1. Django-DB-migrationer:kan ikke ÆNDRE TABEL, fordi den har afventende triggerhændelser

  2. Brug af aktuel tid i UTC som standardværdi i PostgreSQL

  3. Hvordan uploader man et billede til localhost-serveren, mens stien er gemt i mysql-databasen?

  4. Flere databaseforbindelser i Rails