sql >> データベース >  >> RDS >> Mysql

選択した行を交互に注文するにはどうすればよいですか

    以下のクエリを試してください。 ROW_NUMBER() OVER(PARTITION BY ..)を使用する 'which'ごとにランク/レコード番号を生成します アイテムとこれに基づいて並べ替えます。 (これがうまくいくことを願っています。自分で試すためのテーブルスキーマやサンプルデータスクリプトがありません)

    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. 過去5年間の12月31日と今日の日付のデータを取得します

    2. MySQLでutf-8を使用する場合とlatin1を使用する場合

    3. magic_quotes_gpcがオンの場合、mysql_real_escape_string()を使用する必要がありますか?

    4. mysqldumpの問題:-defaults-extra-fileオプションが期待どおりに機能しない