해결할 수없는 문제가 발생했습니다. 예를 들어 행, ID, 시즌, 에피소드, 주문이있는 테이블이 있습니다. 같은 테이블에 데이터 보인다 : 나는 UPDATE없이 SELECT 쿼리를 실행할 때내부 조인을 사용한 잘못된 업데이트
+--------+---------------+----------------+--------------+
| id | season | episode | order |
+--------+---------------+----------------+--------------+
| 153914 | 1 | 1 | NULL |
| 153915 | 1 | 3 | NULL |
| 153916 | 1 | 2 | NULL |
| 153919 | 1 | 3 | NULL |
| 153920 | 1 | 4 | NULL |
| 153921 | 1 | 3 | NULL |
+--------+---------------+----------------+--------------+
그래서, 행 순서가 절대적으로 제대로
SELECT id, season, episode, (@row:[email protected]+1) as order
FROM `shows`, (select @row:=0) as rc
WHERE `show_id`= 14670
ORDER BY CAST(season AS UNSIGNED) ASC, CAST(episode AS UNSIGNED) ASC
+--------+--------+---------+--------+
| id | season | episode | order |
+--------+--------+---------+--------+
| 153914 | 1 | 1 | 1 |
| 153916 | 1 | 2 | 2 |
| 153915 | 1 | 3 | 3 |
| 153919 | 1 | 3 | 4 |
| 153921 | 1 | 3 | 5 |
| 153920 | 1 | 4 | 6 |
+--------+--------+---------+--------+
를 분류되어 있지만 나는 UPDATE의 하위 쿼리와 같은 쿼리를 사용하는 경우 명령문은 같은 방법으로 정렬하지 않고 다른 순서 값을 설정합니다.
UPDATE `shows` f
JOIN
(
SELECT id, (@row:[email protected]+1) as rowOrder
FROM `shows` as Fl, (select @row:=0) as rc
WHERE Fl.`show_id` = 14670
ORDER BY Fl.season ASC, Fl.episode ASC
) t
ON t.id = f.id
SET f.order = t.rowOrder
mysql> SELECT id, season, episode, order FROM `shows` WHERE `show_id`=14670;
+--------+--------+---------+--------+
| id | season | episode | order |
+--------+--------+---------+--------+
| 153914 | 1 | 1 | 1 |
| 153915 | 1 | 3 | 2 |
| 153916 | 1 | 2 | 3 |
| 153919 | 1 | 3 | 4 |
| 153920 | 1 | 4 | 5 |
| 153921 | 1 | 3 | 6 |
+--------+--------+---------+--------+
왜 그런지 어떻게 해결할 수 있는지 설명해주십시오. MySQL 버전 :
>mysql --version
mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper
이가 예상대로 작동 – Strawberry