1

(試合のホームプレーヤー)とmatchesを含むフィールドを持つスポーツフィクスチャデータを含むテーブルがあります。クエリを呼び出して、これら2つのフィールド(つまり、シーズンxから全体的にマッチアワードのプレーヤーが最も多い5人)の上位5つの値を見つけ、発生数とプレーヤーの名前を出力する必要があります。 。home_pomaway_pom

SELECT関数をどこから始めればよいのかわかりません。

一致テーブルには、ページの前半で$league_idに呼び出されleague_idた別のテーブルに対応するフィールドが含まれています。leagues現在、個別のplayersテーブルはありません。これが関連性があると私が考えることができる唯一のものであるため、おそらく冗長になると思いました。

すなわち

match_id | homepom | awaypom | league_id  
1        | Joe A   | Jane B  |  2  
2        | Joe F   | Jane G  |  2  
3        | Jane B  | Joe F   |  2  

ジョーFとジェーンBが2つのpom賞を持っているとリストし、ジェーンGとジョーAが1つ持っているとリストします。

$host="cust-mysql-123-05"; // Host name 
$username="unsn_637140_0003"; // Mysql username 
$password="mypw"; // Mysql password 
$db_name="nsnetballcouk_637140_db3"; // Database name

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

$areatoleaguepom=$_GET['area'];
$seasontoleaguepom=$_GET['season'];
$divisiontoleaguepom=$_GET['division'];
$leaguepom_query=("SELECT league_id FROM leagues WHERE area_id='$areatoleaguepom' AND      season_id='$seasontoleaguepom' AND division_id='$divisiontoleaguepom'");
$leaguepom_result=mysql_query($leaguepom_query);
$leaguepom_row=mysql_fetch_array($leaguepom_result);
$leaguepom_id=$leaguepom_row['league_id'];

$toppom_query=(
"SELECT
player,
COUNT(player) as count
FROM (SELECT homepom AS player
FROM matches
WHERE league_id='$leaguepom_id'
UNION ALL
SELECT awaypom AS player
FROM matches
WHERE league_id='$leaguepom_id'
) as players
GROUP BY player
ORDER BY count DESC 
LIMIT 5
");

$toppom_result=mysql_query($toppom_query);
while ($toppom_row=mysql_fetch_array($toppom_result));

echo $toppom_row['player'] . " " . $toppom_row['count'] . "<br>";

何かご意見は?

4

2 に答える 2

1

GREATEST(home_pom, away_pom)home_pomとの最大値を返しaway_pomます。だから、そのようなもの:

select * from your_table
where season = x
order by greatest(home_pom, away_pom)
desc limit 5
  • where句は、シーズンのすべてのプレーヤーの記録を取りますx
  • order by .. descすべてのプレイヤー レコードを必要な順に並べ替えます。
  • limit 5上位 5 人のプレイヤーが参加します。
于 2012-08-04T10:36:58.330 に答える
1

これは少し複雑すぎるかもしれませんが、とにかく...

SELECT
    player,
    COUNT(player) as count
FROM (
    SELECT homepom AS player
    FROM matches
    WHERE homepom IS NOT NULL AND homepom != '' AND league_id = xxx AND other_things
    UNION ALL
    SELECT awaypom AS player
    FROM matches
    WHERE awaypom IS NOT NULL AND awaypom != '' AND league_id = xxx AND other_things
) as players
GROUP BY player
ORDER BY count DESC 
LIMIT 5

home_pom と away_pom を 1 つの列にマージしてから、group by を実行して、誰が最も多いかをカウントします。

編集:プレイヤーテーブルを削除しました...

于 2012-08-04T10:41:57.503 に答える