2013-05-15 72 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

您的查詢似乎過於複雜。它似乎是由sequence_num找到GroupWise的最大std_star_leg記錄(上start_identtransition_ident分組),不包括對其中已經有一個匹配的非自參照deploy_star,然後用串連所有匹配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 

注意的是,儘管您以前在最外層的選擇列表中選擇x.fix_ident,我省略了這樣的列,因爲它的價值將由服務器從fix_seq中的那些中不確定地選擇。現在

,爲您的問題(這出現可能與其中fix_ident值出現在GROUP_CONCAT()字符串中的順序fix_seq —雖然它的可怕很難理解,從你的問題),也許你想使用ORDER BY參數爲GROUP_CONCAT()函數?例如:

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

但是,我不清楚什麼命令你需要(在原始查詢的唯一ORDER BY條款完全是多餘的)。