Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

mysql Mengapa variabel tidak berubah di if

Apakah Anda mencari ini?

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;

Keluaran:

| 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 |

Ini SQLFiddle demo

Berikut adalah perbaikan untuk kode Anda untuk menghasilkan nomor baris yang benar

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)

Ini SQLFiddle demo

Urutan eksekusi pernyataan SQL memang penting.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memblokir '0000-00-00' dari Kolom Tanggal MySQL

  2. Menyimpan konten array PHP dalam database MySQL

  3. Bisakah basis data relasional menskalakan secara horizontal?

  4. Laravel 5 Eloquent HasManyThrough - beri nama kolom di tautan

  5. MYSQL - Perbedaan antara IN dan EXIST