MySQLテーブル:名前、給与、子供、兄弟、年齢
給与が最大の人、子供、兄弟、年齢が30歳を超える人の名前を取得しようとしています。注:すべての名前は一意です。
これを実現するために、この配列ですべての列をループします。
$columns = array('salary','childrens','brothers')
foreach($columns as $value){
$result=mysql_query("SELECT `name`, `$value` FROM table_name WHERE `age`>30 ORDER BY `$value` ASC LIMIT 1");
while($rows=mysql_fetch_array($result,MYSQL_ASSOC)){
echo $rows[name];
};
};
すべて正常に動作しますが、各名前が取得された(エコーされた)回数もカウントしたいと思います。すなわち:マックスは最高の給料と最高の兄弟数を持っているので、彼の名前は2回検索されました。ローレンは子供が最も多いだけなので、彼の名前は1回取得されました。ジェイソンは一度も回収されたことがないので、彼にとっては0です。
私はこれを試しました:
$i=0;
$columns = array('salary','childrens','brothers')
foreach($columns as $value){
$result=mysql_query("SELECT `name`, `$value` FROM table_name WHERE `age`>30 ORDER BY `$value` ASC LIMIT 1");
while($rows=mysql_fetch_array($result,MYSQL_ASSOC)){
echo "The person who has the max amount of $value is $rows[name]";
$count[$rows[name]] = $i++;
};
};
ただし、意図したとおりに機能しません。最大値があるかどうかを考慮せずに、各名前がすべての列に表示される回数をカウントします。
どんな助けでも適用されるでしょう。ps:コードを改善することもできれば、最大値を取得できれば幸いです。
アップデート:
各テーブルのクエリは次のように出力する必要があります。
Name salary
Max 2000
-
Name childrens
Loren 4
-
Name brothers
Max 3
$count配列は次のようになります。$count= array('Max' => 2、'Loren' => 1、'Jason' => 0、'etc' => 0);