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