0

私はこれらの2つのオブジェクトを持っています:

$userinfo->pilotid;
$departures->total; 

$departures->total特定pilotidの in $userinfo=を取得しようとしています$userinfo->pilotid

ただし、それらをリンクする方法がわからないため、A を B にエコーします。このようなものがありますが、何も表示されません。

<?php echo $pilotid->$departures->total; ?>

さらに、最初のオブジェクトは次のように呼び出されます。

$pilotid = Auth::$userinfo->pilotid;

これは、クエリを使用してオブジェクトが収集されるテーブルの構造です。

http://i.stack.imgur.com/ZaYVe.jpg

4

2 に答える 2

3

OP から提供されたデータに基づいて、これ$departuresは と 1:n の関係にあり、pilotid を含む 1 であると想定してい$userinfoます$userinfo

したがって、そのパイロットが合計で何回出発したかを調べるには、次のようなサブクエリを使用する方法が 2 つあります。

SELECT (SELECT COUNT(*) FROM `departures` WHERE `pilot_id` = ID) as total, * FROM pilots;

この場合、合計はクエリのtotal列に表示され$userinfoます。

2 番目の試行では、実際の PHP を使用します。このシナリオでは、自分で数えます。

最初のステップ: パイロット情報の取得:

$userinfo = array();
while($row = fetch()) {
    $row->total = 0;
    $row->departures = array();
    $userinfo[$row->pilotid] = $row;
}

これらの行は、配列内の ID にキー付けされたパイロット データを提供します。ステップ2。出発をパイロットに接着します。

while($row = fetch()) {
    if(isset($userinfo[$row->pilotid])) {
        $userinfo[$row->pilotid]->departures[] = $row;
        ++$userinfo[$row->pilotid]->total;
    }
}

これがあなたが探しているものではない場合は、さらに情報を提供する必要がありますが、このようtotalに、オブジェクトの変数を使用する$userinfoか、単に呼び出すことで、パイロットの出発を取得できますアレイcount上。departures

実際の出発とパイロットを分離する別のバリ​​アントは、次のようになります。

最初のステップ: パイロット情報の取得:

$userinfo = array();
while($row = fetch()) {
    $row->total = 0;
    $userinfo[$row->pilotid] = $row;
}

これらの行は、配列内の ID にキー付けされたパイロット データを提供します。ステップ2。出発をパイロットに接着します。

$departures = array();
while($row = fetch()) {
    if(isset($userinfo[$row->pilotid])) {
        $departures[] = $row;
        ++$userinfo[$row->pilotid]->total;
    }
}

これらの提案がお役に立てば幸いです。

編集:OPからのいくつかの追加情報の後、問題の情報へのアクセスに使用されるクエリを変更することをお勧めします。

これはOPによる元のコードです

$dep_query = "SELECT COUNT(pilotid) as total, depicao, pilotid FROM phpvms_pireps GROUP
    BY depicao, pilotid ORDER BY total DESC LIMIT 5";

    $fav_deps = DB::get_results($dep_query);

    foreach($fav_deps as $departure)
    {
            $dep_airport = OperationsData::getAirportinfo($departure->depicao);
            $pilotid = Auth::$userinfo->pilotid;
    ?>
            <tr class="awards_table1">
                    <td width="10%"><?php echo $departure->depicao; ?></td>
                    <td width="10%"><img src="<?php echo Countries::getCountryImage($dep_airport->country); ?>" /></td>
                    <td width="60%"><?php echo $dep_airport->name; ?></td>
                    <td width="20%"><?php echo $pilotid->{$departures->total}; ?></td>
            </tr>
    <?php
    }
    ?>

最初に変更するのは、出発情報を取得するために使用するクエリです。問題のパイロットの 1 つだけが実際に必要な場合、なぜすべての情報を取得する必要があるのでしょうか。

$pilotid = $userinfo->pilotid; //As per Chat discussion
$dep_query = "SELECT COUNT(depicao) as total, depicao FROM phpvms_pireps WHERE pilotid = $pilotid GROUP BY depicao ORDER BY total DESC LIMIT 5";

このクエリは、問題のパイロットによって実行された、さまざまな空港からの出発の上位 5 件を返します。残りは:

$fav_deps = DB::get_results($dep_query);

if(is_array($fav_deps)) {    //For the general use
    foreach($fav_deps as $departure) {
        $dep_airport = OperationsData::getAirportinfo($departure->depicao); ?>
        <tr class="awards_table1">
            <td width="10%"><?php echo $departure->depicao; ?></td>
            <td width="10%"><img src="<?php echo Countries::getCountryImage($dep_airport->country); ?>" /></td>
            <td width="60%"><?php echo $dep_airport->name; ?></td>
            <td width="20%"><?php echo $departure->total; ?></td> //Here is the actually changed Layout code
        </tr>
<?php 
    } 
} else echo "This pilot didn't have any departures yet.";

?>

これらの変更により、コードは目的の結果を出力するはずです。ただし、完全にテストされていません。しかし、それはあなたに正しい考えを与えるはずです。

于 2013-02-24T15:29:49.743 に答える
0

必要なのはこれだと思います(中括弧に注意してください):

<?php echo $pilotid->{$departures->total}; ?>

私が質問を誤解していない限り...

于 2013-02-24T15:18:04.140 に答える