-1

そこにいるすべての教祖への簡単な質問。

複数のデータを含むサブセクションを持つXML形式でテーブルからデータを取得しようとしています。これは、マネージャーとその従業員のリストです。組織図のように考えてください。それはすべて次のように見える1つのテーブルから出てきます:

| ManagerID| EmployeeID |
|     0049 |    4433    |
|     0049 |    4430    |

私はこれを必要とする:

<manager>
  <id>0049</id>
  <name>John Doe</name>
  <employees>
    <employee>
      <id>4433</id>
    </employee>
    <employee>
      <id>4430</id>
    </employee>
  </employees>
</manager>

ここで見つけた簡単なクエリをいくつか書いてみました。ただし、数が多くなる可能性があるため、正しく機能しません。同じマネージャーの複数のレコードを取得しています。

マネージャーごとに1つだけ必要です。適切なクエリは何ですか?

4

1 に答える 1

0

私は階層的な SQL クエリは好きではありません。もちろん、それらは多くの SQL データベースでサポートされていますが、イン メモリ ポスト プロセッシングが好きです。これは非常にシンプルで単純であり、さらに重要なことは、簡単に改善したり、バグを修正したりできるからです。データ。

おおよその作業は次のとおりです。次の例は PHP のものです。これは、同じ Manager->Employee 関係を読み取り、階層全体を JSON オブジェクトにエクスポートします。

あなたの場合、最終オブジェクトを JSON ではなく XML にシリアライズする必要があります。

// Connect to your Database 
mysql_connect("localhost", "username", "password") or die(mysql_error()); 
mysql_select_db("test") or die(mysql_error()); 

// Select accounts
$response = mysql_query("SELECT EmployeeID as id, ManagerID as parentid, name, title, description, phone, email, photo FROM accounts") or die(mysql_error()); 

// create some class for your records
class Account
{
    public $id = 0;
    public $parentid = null;
    public $name = '';
    public $title = '';
    public $desciption = '';
    public $phone = '';
    public $email = '';
    public $photo = '';

    public $children = array();

    public function load($record) {
        $this->id = intval($record['record_id']);
        $this->parentid = intval($record['parentid']);
        $this->title = $record['title'];
        $this->name = $record['name'];
        $this->description = $record['description'];
        $this->phone = $record['phone'];
        $this->email = $record['email'];
        $this->photo = $record['photo'];
    } 
}

// create hash and group all children by parentid
$children = Array();
while($record = mysql_fetch_array( $response )) 
{ 
    $account = new Account();
    $account->load($record);

    if( !isset($children[$account->parentid])) {
        $children[$account->parentid] = array();
    }
    array_push($children[$account->parentid], $account);
} 

// Create hierarchical structure starting from  $rootAccount
function recursiveLoadChildren($parent, $children) {
    if(isset($children[$parent->id])) {
        foreach($children[$parent->id] as $id => $account) {
            array_push($parent->children, $account);
            recursiveLoadChildren($account, $children);
        }
    }
}

$rootAccount = $children[0][0];
recursiveLoadChildren($rootAccount, $children);    

// serialize $rootAccount object including all its children into JSON string  
$jsonstring = json_encode($rootAccount);
于 2013-01-16T03:23:43.130 に答える