2012-01-23 24 views
0

誰かが私を助けてくれますか?私はすべてのイベントを日付順に並べたXMLリストを作成しようとしています。私はPHPスクリプトを使ってこれをやっています。はSQL文を理解できません

$sql = "SELECT DATE_FORMAT(K.kalender_datum,'%W %d %M %Y') as afhaaldag, A.afval_naam 
     FROM tblkalender K 
     INNER JOIN tblafval A 
     ON A.pk_afval_Id = K.fk_afval_Id 
     WHERE kalender_datum > CURDATE() 
     ORDER BY K.kalender_datum"; 
$query = mysql_query($sql); 

$last_date = ""; 
$tag_open = false; 

$xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; 
$xml .= "<kalender>\n"; 

for($i = 0; $i<mysql_num_rows($query); $i++) 
{ 
    $itemrow = mysql_fetch_assoc($query); 

    if($last_date != $itemrow['kalender_datum']) 
    { 
     //als de laatste datum die gebruikt is niet gelijk is aan de datum die hij binnen krijgt, moet hij een nieuwe afhaaldag beginnen 
     if($tag_open) 
     { 
      $xml .= "\t</afhaaldag>\n"; 
      $tag_open = false; 
     } 
     $xml .= "\t<afhaaldag>\n"; 
     $xml .= "\t<datum>" . $itemrow['kalender_datum'] . "</datum>\n"; 
     $xml .= "\t<afval>" . $itemrow['afval_naam'] . "</afval>\n";  
     $last_date = $itemrow['kalender_datum']; 
    } 

    else 
    { 
     $xml .= "\t<afval>" . $itemrow['afval_naam'] . "</afval>\n"; 
     $last_date = $itemrow['kalender_datum']; 
     $tag_open = true; 
    } 
} 
$xml .= "</kalender>"; 
echo $xml; 

私にXMLでこの出力を与えること:今、私はこれ持って

<kalender> 
    <afval>Grofvuil</afval> 
    <afval>Restafval</afval> 
    <afval>GFT</afval> 
    <afval>PMD</afval> 
    <afval>Snoeiresten</afval> 
    <afval>GFT</afval> 
    <afval>Restafval</afval> 
    <afval>GFT</afval> 
    <afval>PMD</afval> 
    <afval>GFT</afval> 
    <afval>Snoeiresten</afval> 
    <afval>Papier en karton</afval> 
    <afval>Grofvuil</afval> 
    <afval>Restafval</afval> 
    <afval>GFT</afval> 
    <afval>PMD</afval> 
</kalender> 

をしかし、私に必要なのはこれです:

<kalender> 
    <afhaaldag> 
     <datum>2012-01-02</datum> 
     <afval>GFT</afval> 
     <afval>Restafval</afval> 
     <afval>PMD</afval> 
    </afhaaldag> 
    <afhaaldag> 
     <datum>2012-01-17</datum> 
     <afval>Papier en karton</afval> 
    </afhaaldag> 
    <afhaaldag> 
     <datum>2012-01-23</datum> 
     <afval>GFT</afval> 
    </afhaaldag> 
</kalender> 

誰かが、私はそれを行うことができる方法を知っています。私はある種のループが必要であることを知っている(私はforループを推測している)。誰かが私にこれを手伝ってもらえますか?

答えて

1

私はここでのpythonを使っていますが、あなたは問題なく、コードをたどることができます。

kalender = [ 
('2012-01-02', 'GFT'), 
('2012-01-02', 'Restafval'), 
('2012-01-02', 'PMD'), 
('2012-01-17', 'Papier en karton'), 
('2012-01-23', 'GFT') 
] 

last_date = "" 
tag_open = False 

xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" 
xml += "<kalender>\n" 


for i in kalender: 
    # i[0] == datum 
    # i[1] == afval 

    # i == $itemrow in your code 

    datum = i[0] 
    afval = i[1] 

    if last_date != datum: 
     if tag_open: 
      xml += "\t</afhaaldag>\n" 
      tag_open = False 

     xml += "\t<afhaaldag>\n" 
     xml += "\t<datum>" + datum + "</datum>\n" 
     xml += "\t<afval>" + afval + "</afval>\n" 
     last_date = datum 
      tag_open = True 
    else: 
     xml += "\t<afval>" + afval + "</afval>\n" 
     last_date = datum 
     tag_open = True 
xml += "\t</afhaaldag>\n" 
xml += "</kalender>" 
print xml 

そして、これが出力されます:

<?xml version="1.0" encoding="UTF-8"?> 
<kalender> 
    <afhaaldag> 
    <datum>2012-01-02</datum> 
    <afval>GFT</afval> 
    <afval>Restafval</afval> 
    <afval>PMD</afval> 
    </afhaaldag> 
    <afhaaldag> 
    <datum>2012-01-17</datum> 
    <afval>Papier en karton</afval> 
    </afhaaldag> 
    <afhaaldag> 
    <datum>2012-01-23</datum> 
    <afval>GFT</afval> 
    </afhaaldag> 
</kalender> 

[終了]

が出力されます正確にあなたが探している、それですか?あなたの新しい出力ではdatumタグが存在しないので、もう一度チェックしてみてください。

tag_open = True ##(in the True part of the If Statement) 
xml += "\t</afhaaldag>\n" ###Before ending the kalender tag. 

else節にif文を削除します。

お知らせは、私は2つの余分な行を追加します。

コード:http://dl.dropbox.com/u/3389104/kal.py

-------編集

(コードで)私のコメントの終わり:

$last_date = ""; 
$tag_open = false; 

for($i = 0; $i<mysql_num_rows($query); $i++) 
{ 
    $itemrow = mysql_fetch_assoc($query); 

    if ($last_date != $itemrow['kalender_datum']) 
    { 
     //New Entry 
     if (tag_open) 
     { 
      $xml .= "\t</afhaaldag>\n"; 
      tag_open = false; 
     } 
     $xml .= "\t<afhaaldag>\n"; 
     $xml .= "\t<datum>" . $itemrow['kalender_datum'] . "</datum>\n"; 
     $xml .= "\t<afval>" . $itemrow['afval_naam'] . "</afval>\n"; 
     $xml .= "\t</afhaaldag>\n"; 

     $last_date = $itemrow['kalender_datum'] 
    } 
    else 
    { 
     if not (tag_open) 
     { 
      $xml .= "\t<afhaaldag>\n"; 
      tag_open = true; 
     } 
     $xml .= "\t<afval>" . $itemrow['afval_naam'] . "</afval>\n"; 
    } 
} 

は、いくつかのタイプミスをすみません、私はPCを持っていません今すぐphpで。このコードは私の一般的なアイデアですが、うまくいけません。

+0

明日は試してみます(私はFilezillaにいくつかの問題があり、サーバーに接続できません)。ありがとう! –

+0

私はついにそれをテストすることができましたが、何が間違っているのか分かりません。あなたが私に与えたコードは、タグが閉じられていないというエラーを出しました。私はそれを修正することができましたが、それは最善のことではありません。私は今、この取得しています: Restafval GFT PMD 剪定残基を Restafval PMD GFT 剪定残基 紙やダンボールの あなたは私の新しいコードを見ることができるように、粗 私は私のオリジナルのポストを編集します。 –

+0

私の編集した解答を実行コードで見てください。デバッグのためにさらにエコーを挿入してみてください。 – Jaxedin

1

質問の結果に「kalender_datum」というキーがありません。公式日付をafhaaldagにエイリアスします。だからあなたのループの中で、あなたが持っている必要があります。

if($last_date != $itemrow['afhaaldag']) 
{ 
    ... 
    $xml .= "\t<datum>" . $itemrow['afhaaldag'] . "</datum>\n"; 
    $xml .= "\t<afval>" . $itemrow['afval_naam'] . "</afval>\n";  
    $last_date = $itemrow['afhaaldag']; 
} 

else 
{ 
    $xml .= "\t<afval>" . $itemrow['afval_naam'] . "</afval>\n"; 
    $last_date = $itemrow['afhaaldag']; 
    $tag_open = true; 
} 

それは私がコードをテストしていないとして間違っているのですが、それが問題になることができるものであるかどうかわかりません。

+0

そうそう、どのように私のダム(*赤面)私は(私は英語の試験で私の心を持っている)クエリを編集しますが、完全にそれを忘れてしまいました。私は明日それを試してみるだろう、私は本当に今私の英語を仕事しなければならない。試験は12時間以内です –

+0

気付いてくれてありがとう!私は本当にそれを見落とした:) –

関連する問題