Mysql
 sql >> база данни >  >> RDS >> Mysql

mysql Защо променливата не се променя в if

Търсите ли това?

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 | ЗАГЛАВИЕ ||----|----|-------------|--------|| 1 | 43 | 1 | Заглавие1 || 1 | 28 | 2 | Заглавие2 || 2 | 42 | 2 | Заглавие3 || 1 | 11 | 3 | Заглавие4 || 1 | 3 | 4 | Заглавие5 || 2 | 29 | 4 | Заглавие6 || 3 | 33 | 4 | Заглавие7 |

Ето го 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Добавяне към един и същи масив с два различни цикъла foreach PHP/SQL

  2. Грешка при използване на персонализирана DQL функция с Doctrine и Symfony2

  3. Как да зададете изчакване за MySQL заявка с помощта на C API

  4. Как да намеря (декодирам) PostgreSQL заявка от Wireshark File?

  5. Импортиране, експортиране на mysql база данни супербърз команден ред