2013-05-15 3 views
1

결과 집합이 화면에 표시되어야합니다. 그러나 문제는 echo 명령을 사용하여 결과 집합의 각 행을 표시하는 동안 순서가 변경되고 있습니다. 아무도 말할 수 없습니다. 왜 이런 일이 일어나고 그것을 극복 할 수있는 방법을 제공 할 수 있습니다. 내 실제 및 인쇄 결과가 여기에 있습니다.결과 집합 순서가 PHP로 변경

실제 결과 세트 :

JAIKE-ILENE-WACKI-MAZIE-REGLE-SBJ-KMMU 
LVZ-HARTY-MUGZY-STW 
MAZIE-SIXIE-SBJ-KMMU 
PXT-LOUIE-GATBY-RAZER-BUZIE-JAIKE-ILENE-WACKI-MAZIE 
SWANN-GATBY-RAZER-BUZIE-JAIKE-ILENE-WACKI-MAZIE 

출력 :

JAIKE-SBJ-ILENE-KMMU-WACKI-MAZIE-REGLE 
MUGZY-STW-LVZ-HARTY 
SBJ-KMMU-MAZIE-SIXIE 
ILENE-GATBY-WACKI-RAZER-MAZIE-BUZIE-PXT-JAIKE-LOUIE 
WACKI-RAZER-MAZIE-BUZIE-JAIKE-SWANN-ILENE-GATBY 

것은 여기

$sql3="SELECT GROUP_CONCAT(l.fix_ident SEPARATOR '-') AS fix_seq,l.airport_ident,x.star_ident,x.transition_ident, 
       x.fix_ident from corept.std_star_leg l 
       JOIN 
        (SELECT DISTINCT c.airport_ident,c.star_ident,c.transition_ident,c.fix_ident 
        FROM corept.std_star_leg c 
        INNER JOIN 
          (SELECT star_ident,transition_ident,max(sequence_num) seq,route_type 
          FROM corept.std_star_leg 
          WHERE data_supplier='J' 
          AND airport_ident='KMMU' 
          GROUP BY star_ident, 
          transition_ident)b ON c.sequence_num=b.seq 
          AND c.star_ident=b.star_ident AND c.transition_ident=b.transition_ident 
          LEFT JOIN 
           (SELECT name,trans 
           FROM skyplan_deploy.deploy_stars 
           WHERE apt='KMMU' 
           AND name!=trans) d 
           ON d.name=c.star_ident 
           AND d.trans=c.fix_ident 
           WHERE c.data_supplier='J' 
           AND c.airport_ident='KMMU' AND d.name is null)x 
           where l.airport_ident='KMMU' and l.transition_ident=x.transition_ident 
           and l.star_ident=x.star_ident and l.data_supplier='J' 
           group by x.star_ident,x.transition_ident 
           order by l.star_ident,x.transition_ident,l.sequence_num"; 
    $res3=mysqli_query($mysqli,$sql3); 
if($res3) 
    { 
    while($newArray3=mysqli_fetch_array($res3,MYSQLI_ASSOC)) 
    { 
    $apt=$newArray3['airport_ident']; 
    $star_ident=$newArray3['star_ident']; 
    $trans_ident=$newArray3['transition_ident']; 
    $fix_ident=$newArray3['fix_ident']; 
    $fix_seq=$newArray3['fix_seq']; 
    echo $apt.",".$star_ident.",".$trans_ident.",".$fix_ident.",COREPT,".$fix_seq; 
    echo "<br>"; 
    } 
    } 
else 
{ 
    printf("ERROR:%s\n",mysqli_error($mysqli)); 
} 
+1

코드를 보여주십시오. – Kasyx

+0

전체 스크립트 또는 다른 쿼리를 표시 하시겠습니까? – user2341693

+1

"실제 결과 집합"의 순서를 어떻게 알 수 있습니까? – eggyal

답변

0

귀하의 질의가 지나치게 복잡 보이는 내 코드입니다. 는 (start_identtransition_ident 그룹화) sequence_num하여 GroupWise에 최대에게 std_star_leg 레코드를 찾는 이미 존재하는 것들을 제외 될 나타나는 일치하는 비 - 자기 - 참조 후 연결된 모든 일치 fix_ident 값으로 다시 분류 결과를 반환 deploy_star을 문자열로? 이전에 가장 바깥 쪽 선택 목록에서 x.fix_ident을 선택했다 반면에, 나는 그것의 가치 때문에 이러한 열을 생략 한 것을

SELECT GROUP_CONCAT(fix_ident SEPARATOR '-') AS fix_seq, 
     airport_ident, 
     star_ident, 
     transition_ident 
FROM  corept.std_star_leg l NATURAL JOIN (
      SELECT star_ident, transition_ident, 
        data_supplier, airport_ident, 
        MAX(sequence_num) sequence_num 
      FROM  corept.std_star_leg 
      WHERE data_supplier = 'J' 
       AND airport_ident = 'KMMU' 
      GROUP BY star_ident, transition_ident 
     ) b 
WHERE NOT EXISTS (
      SELECT NULL 
      FROM skyplan_deploy.deploy_stars d 
      WHERE d.name != d.trans 
       AND d.name = l.star_ident 
       AND d.trans = l.fix_ident 
       AND d.apt = l.airport_ident 
     ) 
GROUP BY star_ident, transition_ident 

참고 :

그렇다면, 다음과 같은 매우 간단 쿼리는 동일한 결과를 달성한다고 fix_seq에있는 것 중에서 서버에 의해 불확실하게 선택 될 것입니다.

지금, 당신의 문제에 관해서는 (이 fix_ident 값이 GROUP_CONCAT() 문자열 내에서 표시되는 순서에 관련이있는 것으로 나타납니다 fix_seq —이 질문에서 것을 감사하는 정말 어려운 있지만), 아마도 당신은을 사용하려면 GROUP_CONCAT() 함수에 대한 ORDER BY 매개 변수는 무엇입니까? 예를 들어 :

SELECT GROUP_CONCAT(fix_ident SEPARATOR '-' ORDER BY ...) AS fix_seq 

그러나, 당신이 필요로 주문 무엇을 나에게 분명하지 않다 (원래 쿼리의 유일한 ORDER BY 절은 완전히 중복이었다).