2014-09-08 3 views
1

안녕하세요, mysql보기에서 순환 자동 번호 매기기를 구현하려고합니다. 나는 Pure-SQL Technique for Auto-Numbering Rows in Result Set으로 시작하여 작동하게 만들었습니다. 그럼 내가 조정 해보고 거기에있어 ... 그리고 지금 나는 stuMainmped입니다사이클에서 mysql보기의 자동 번호 매기기 행

보기 개 (CaneID)와 그들의 ascendants (AvoID)를 나열합니다. 내가 성취하고자하는 것은 메인 개 (CaneID)가 바뀔 때마다 번호를 다시 매기는 것입니다. 그래서 나는 1에서 개 번호에 속하는 각자를 가질 수 있습니다.

지금까지 처음 개에 대해서만 작동하고, 다음은 여전히 ​​순서대로 번호가 매겨집니다하지만이 내 시야 쿼리 1.

에서 시작하지 않는 : 나는

SELECT 
`avi1`.`CaneID`, 
`avi1`.`Cane`, 
`avi1`.`PedPos`, 
`avi1`.`AvoID`, 
`avi1`.`Avo`, 
`avi1`.`Ripetuto`, 
(
    SELECT 
     count(0) 
    FROM 
     `v_avi_ripetuti` `Avi2` 
    WHERE 
     (
      (`avi2`.`Ripetuto` > 1) 
      AND (`avi2`.`CaneID` <= `avi1`.`CaneID`) 
      AND (`avi2`.`AvoID` <= `avi1`.`AvoID`) 

     ) 
    ORDER BY 
     `avi2`.`CaneID`, 
     `avi2`.`AvoID` 
) AS `RowNumber` 
FROM 
`v_avi_ripetuti` `Avi1` 
WHERE 
(`avi1`.`Ripetuto` > 1) 
ORDER BY 
`avi1`.`CaneID`, 
`avi1`.`AvoID` 

을 얻고 무엇 이 시점에서입니다 :

CaneID Cane   AvoID Avo        RowNumber 
--------------------------------------------------------------------- 
2  Antigua  472 Anika v. Stammhaus Eike   1 
2  Antigua  527 Britta v.d. Römerlinde   2 
2  Antigua  642 Ares v. Nettenberg    3 
2  Antigua  657 Carmen v. Westfalenzwinger  4 
2  Antigua  658 Leu v. Stammhaus Eike   5 
2  Antigua  684 Chipsy v. Theresienhof   6 
2  Antigua  1662 Astrit v.d. Burrlinde   7 
-----------------------> New Main dog<------------------------------- 
3  Ambra Gaya 472 Anika v. Stammhaus Eike   2 
3  Ambra Gaya 657 Carmen v. Westfalenzwinger  6 
3  Ambra Gaya 658 Leu v. Stammhaus Eike   8 
3  Ambra Gaya 684 Chipsy v. Theresienhof   10 
3  Ambra Gaya 718 Leo v. guten Löwen    11 
3  Ambra Gaya 1022 Zara v. Ratibor u. Corvey  12 
3  Ambra Gaya 1024 Ruth v. Ratibor u. Corvey  13 
3  Ambra Gaya 1050 Dunja v. Hofoldinger Forst  14 
3  Ambra Gaya 1200 Icksle v. Ratibor u. Corvey  15 
3  Ambra Gaya 1227 Troldegaards Tanja    16 
3  Ambra Gaya 1228 Anemone v. Ratibor u. Corvey 17 
-----------------------> New Main dog<------------------------------- 
3371 Always Habit 600 Absinthe v. Kallenberg   4 
3371 Always Habit 750 Mathoaka's Relaxing Boy   13 
3371 Always Habit 2560 Leijonamielen Luvaton Lyyli  21 

나는 MySQL은 매우 새로운 오전 (일주일 전에 그것을 설치) 뒤에 액세스를 떠나 매우 열심히 노력하고 .... 기다려주십시오.

답변

1

나는 그것을 했어 !!!!!!! COUNT() 대신 SUM() 함수를 사용했습니다. 이 경우 다른 사람이 사용할 수에 내 MySQL의 코드보기입니다 :

SELECT 
`avi1`.`CaneID`, 
`avi1`.`Cane`, 
`avi1`.`PedPos`, 
`avi1`.`AvoID`, 
`avi1`.`Avo`, 
`avi1`.`Ripetuto`, 
(
    SELECT 
     sum(

      IF (
       (
        (
         `avi2`.`CaneID` = `avi1`.`CaneID` 
        ) 
        AND (`avi2`.`AvoID` <= `avi1`.`AvoID`) 
       ), 
       1, 
       0 
      ) 
     ) 
    FROM 
     `v_avi_ripetuti` `Avi2` 
    WHERE 
     (`avi2`.`Ripetuto` > 1) 
) AS `NumRiga` 
    FROM 
`v_avi_ripetuti` `Avi1` 
WHERE 
(`avi1`.`Ripetuto` > 1) 

는이 나에게 원하는 결과를 제공합니다 내가 달성하고자하는 것을

CaneID Cane   AvoID Avo        RowNumber 
--------------------------------------------------------------------- 
2  Antigua  472 Anika v. Stammhaus Eike   1 
2  Antigua  527 Britta v.d. Römerlinde   2 
2  Antigua  642 Ares v. Nettenberg    3 
2  Antigua  657 Carmen v. Westfalenzwinger  4 
2  Antigua  658 Leu v. Stammhaus Eike   5 
2  Antigua  684 Chipsy v. Theresienhof   6 
2  Antigua  1662 Astrit v.d. Burrlinde   7 
-----------------------> New Main dog<------------------------------- 
3  Ambra Gaya 472 Anika v. Stammhaus Eike   1 
3  Ambra Gaya 657 Carmen v. Westfalenzwinger  2 
3  Ambra Gaya 658 Leu v. Stammhaus Eike   3 
3  Ambra Gaya 684 Chipsy v. Theresienhof   4 
3  Ambra Gaya 718 Leo v. guten Löwen    5 
3  Ambra Gaya 1022 Zara v. Ratibor u. Corvey  6 
3  Ambra Gaya 1024 Ruth v. Ratibor u. Corvey  7 
3  Ambra Gaya 1050 Dunja v. Hofoldinger Forst  8 
3  Ambra Gaya 1200 Icksle v. Ratibor u. Corvey  9 
3  Ambra Gaya 1227 Troldegaards Tanja    10 
3  Ambra Gaya 1228 Anemone v. Ratibor u. Corvey 11 
-----------------------> New Main dog<------------------------------- 
3371 Always Habit 600 Absinthe v. Kallenberg   1 
3371 Always Habit 750 Mathoaka's Relaxing Boy   2 
3371 Always Habit 2560 Leijonamielen Luvaton Lyyli  3 
1

나는 결과물에 주문되어있는 물건을 주문하고 싶습니다. 처음에는 CaneId, 그 다음은 AvoId입니다. 이 경우, 올바른 부질 : 그것은 부질의 관련성 때문에 where 절 고정 이외에

(SELECT count(*) 
FROM v_avi_ripetuti` `Avi2` 
    WHERE `avi2`.`Ripetuto` > 1 AND 
     (`avi2`.`CaneID` < `avi1`.`CaneID` or 
      `avi2`.`CaneID` = `avi1`.`CaneID` and avi2`.`AvoID` <= `avi1`.`AvoID` 
     ) 
) AS `RowNumber` 

, 난 또한 order by을 제거 하였다. count(0)count(*)으로 변경했습니다. 이것들은 동일하지만, count(0)은 나에게 어색해 보인다.

+0

이를 그 때마다의 번호가 다시 시작 메인 개 같은 2 앤티 472 아니카 1 2 앤티 527 브리타 2 2 앤티 642 아레스 3 2 앤티 657 카르멘 4 3 암 브라 가야 472 아니카 1 3 암 브라 가야 657 카르멘 2 3371 항상 습관 600 압생트 1 3371 항상 습관 750 Mathoaka 's 2 –

+0

@PaolaMaggi. . . 이 솔루션이 작동하지 않습니까? –

+0

어쩌면 나는 질문에 너무 명확하지 않았을 ... 내 영어가 결코 우수하지 않다, 내가 달성하고 싶었던 것은 일종의 "사이클링"이었고 그래서 각각의 새로운 개가 1에서 시작하여 번호를 매기도록했다. 당신의 솔루션은 아름답게 "깨지지 않는"리스트를 가지고 있지만 너무 마음에두고 있습니다 .-) - –