Mysql
 sql >> Baza danych >  >> RDS >> Mysql

mysql Dlaczego zmienna nie zmienia się w if

Szukasz tego?

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;

Wyjście:

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

Oto SQLFiddle demo

Oto poprawka, dzięki której Twój kod będzie generował prawidłowe numery wierszy

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)

Oto SQLFiddle demo

Kolejność wykonywania instrukcji SQL ma znaczenie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO pobierz / pobierz wszystko

  2. Brak instrukcji przygotowanych po stronie serwera przy użyciu MySQL Connector/J

  3. MySQL:wybierz * z tabeli, gdzie col IN (null, ) możliwe bez OR

  4. link weryfikacyjny przez e-mail

  5. mysql REPLACE zapytanie z wieloma kluczami podstawowymi