sql >> Database >  >> RDS >> Mysql

mysql Waarom variabele niet verandert in if

Ben je hier naar op zoek?

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;

Uitgang:

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

Hier is SQLFiddle demo

Hier is een oplossing voor uw code om de juiste rijnummers te produceren

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)

Hier is SQLFiddle demo

De volgorde van uitvoering van SQL-instructies doet er toe.




  1. Oracle SQLPlus omgevingsvariabele instellen op basis van variabele

  2. databaseverbindingsfout geassocieerd met de codering

  3. Hoe de ID van de laatst bijgewerkte rij in MySQL te krijgen?

  4. Rapporttool voor gegevenswoordenboek