Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment puis-je commander les lignes sélectionnées alternativement

Veuillez essayer cette requête ci-dessous. Utilisation de ROW_NUMBER() OVER(PARTITION BY ..) générer un numéro de rang/enregistrement pour chaque 'which' éléments et trier en fonction de cela. (J'espère que cela fonctionnera pour vous, je n'ai pas le schéma de table ou l'exemple de script de données pour essayer moi-même)

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;