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

mysql変数が変更されない理由

    これをお探しですか?

    SELECT rn, id, category_id, title
      FROM
    (
      SELECT *, @a := IF(@c = category_id, @a + 1, 1) rn, @c := category_id
        FROM photos CROSS JOIN (SELECT @c := NULL, @a := 0) i
       ORDER BY category_id
    ) q
     WHERE rn <= 4;
    

    出力:

    | RN | ID | CATEGORY_ID |  TITLE |
    |----|----|-------------|--------|
    |  1 | 43 |           1 | Title1 |
    |  1 | 28 |           2 | Title2 |
    |  2 | 42 |           2 | Title3 |
    |  1 | 11 |           3 | Title4 |
    |  1 |  3 |           4 | Title5 |
    |  2 | 29 |           4 | Title6 |
    |  3 | 33 |           4 | Title7 |
    

    こちらがSQLFiddle です。 デモ

    正しい行番号を生成するためのコードの修正は次のとおりです

    SET @a:=0;
    SET @cid:=0;   
    SELECT @a, @cid, q.*, @cid:=q.category_id FROM (
        SELECT *
        FROM photos
        ORDER BY category_id
    ) AS q
    WHERE @a := IF(@cid=q.category_id, @a+1, 1)
    

    これがSQLFiddle です。 デモ

    SQLステートメントの実行順序は重要です。




    1. JPA列挙型(java.lang.ClassCastException:org.postgresql.util.PGobject)

    2. EssentialPostgreSQLモニタリング-パート2

    3. MYSQLは値によるカウントを選択します

    4. TIMESTAMP()の例– MySQL