0

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);

4

2 に答える 2

0

すべての名前に同じカウンターを使用しました。それらを分割してみてください。そんな感じ:

$count=array();
$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]";
        if(!isset($count[$rows[name]]))
            $count[$rows[name]] = 0;
        ++$count[$rows[name]];
    };
};
print_r($count);

UPD:また、MAX値の行が必要な場合は、DESC代わりにを使用する必要がありますASC

UPD2:SELECT DISTINCT name FROM table_nameすべてのユーザーを取得するには、前のコードの前に実行して配列にフェッチする必要もあります$count[$r['name']] = 0

于 2012-11-16T02:26:39.410 に答える
0

何をしているのかわかりませんが、プログラミングでは比較メソッドを使用して最大値を取得しますが、サーバー側言語には別のMAX()関数があり、すべてのレコードhttp://www.w3schoolsの最大値を取得します。 com / sql / sql_func_max.asp

$columns = array('salary','childrens','brothers');
$highest = array(array('salary'=>0,'childrens'=>0,'brothers'=>0));

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)){

    //compare the value of each record if greater then replace
    if($highest[$value]<$rows[$value]){
    //replace with current highest value and set name into array
    $highest[$value]=$rows[$value];
    $highest[$value]=$rows[name];
    }
  };
};

print_r($highest);
于 2012-11-16T02:38:57.270 に答える