fetus Diary

2008/03/30(日) - やる気が無いときのソースなんてこんなもん

$lastupdate = strtotime($conn->GetOne("SELECT max(modify_date) FROM address_data"));
$document = new DOMDocument('1.0', 'UTF-8');
$document->xmlStandalone = true;
$document->formatOutput = true;
$rootnode = $document->createElement('data');
$rootnode->setAttribute('xmlns', 'http://fetus.k-hsu.net/document/programming/api/MobilePhoneAddress/xml');
$rootnode->setAttribute('update', date('c', $lastupdate));
$rootnode->setAttribute('generate', date('c'));
$document->appendChild($rootnode);
if($carriers = $conn->Execute("SELECT * FROM carrier_master ORDER BY sorting_hint")) {
  foreach($carriers as $carrier) {
    $carrier_node = $document->createElement('carrier');
    $carrier_node->setAttribute('id',      $carrier['carrier_id']);
    $carrier_node->setAttribute('name',    $carrier['name_jp']);
    $carrier_node->setAttribute('name_en', $carrier['name_en']);
    $rootnode->appendChild($carrier_node);
    if($groups = $conn->Execute("SELECT * FROM address_group_master WHERE carrier_id = ? ORDER BY sorting_hint", array($carrier['carrier_id']))) {
      foreach($groups as $group) {
        $group_node = $document->createElement('addresses');
        $group_node->setAttribute('id',      $group['group_id']);
        $group_node->setAttribute('name',    $group['name_jp']);
        $group_node->setAttribute('name_en', $group['name_en']);
        $carrier_node->appendChild($group_node);
        if($addresses = $conn->Execute("SELECT * FROM address_data WHERE group_id = ? ORDER BY address, modify_date, address_id", array($group['group_id']))) {
          foreach($addresses as $address) {
            $address_node = $document->createElement('address', $address['address']);
            $address_node->setAttribute('update', date('c', strtotime($address['modify_date'])));
            list($address_from, $address_to, $address_num) = GetAddressInfo($address['address']);
            $address_node->setAttribute('from', $address_from);
            $address_node->setAttribute('to', $address_to);
            $address_node->setAttribute('count', $address_num);
            $group_node->appendChild($address_node);
          }
        }
      }
    }
  }
}
header('Content-Type: application/xml');
echo $document->saveXML();

SQL と DOM 操作が混じっている上似たような SQL を複数回発行するから遅いですが何か(メモリを犠牲にして、group_id でフィルタかけずに取ってきてプログラム側で処理した方が早いことが往々にしてある)

# このソース読めば、DB 格納形式そのまんまで出力しているのがよくわかるはず。

コメント

コメントはありません。

名前
メール
コメント

※HTML タグは使えません。HTTP URL には自動リンクが張られます。

Captcha
画像から読み取れる文字を入力: