Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

mysql Tại sao biến không thay đổi trong if

Bạn đang tìm kiếm cái này?

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;

Đầu ra:

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

Đây là SQLFiddle bản demo

Đây là bản sửa lỗi để mã của bạn tạo ra số hàng chính xác

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)

Đây là SQLFiddle bản demo

Thứ tự thực thi câu lệnh SQL rất quan trọng.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khi một ứng dụng Flask với Flask-SQLAlchemy đang chạy, làm cách nào để sử dụng MySQL client trên cùng một cơ sở dữ liệu tại cùng một thời điểm?

  2. Làm thế nào để chuyển đổi chuỗi với phân số thành float trong Python

  3. MySQL bảng khổng lồ THAM GIA làm cho cơ sở dữ liệu sụp đổ

  4. MYSQL - Thứ tự các giá trị dấu thời gian tăng dần theo thứ tự, từ mới nhất đến cũ nhất?

  5. Làm cách nào tôi có thể bỏ qua một cột khỏi câu lệnh SELECT trong khi sử dụng nó trong mệnh đề HAVING?