2017-04-12 17 views
0

トーナメントを作成するためのWebアプリケーションを作成しています。このプロジェクトの過程でPHPを学んだので、私のスキルはおそらく最高ではありません。2つのmysqlグループクエリを組み合わせる

私のデータベースには識別子があります。day2_semifinalまたはday2_additionalは、基本的に準決為の種類を識別します。

だから私の最初のクエリがある:これは私のすべての準決勝のグループを取得します

$numberquery = mysql_query(" 
SELECT * 
FROM tourneyplayers 
INNER JOIN results 
    on (resultid=r_id) 
INNER JOIN players 
    ON (p_id=playerid) 
INNER JOIN tourneys 
    on (T_Id=tourneyid) 
WHERE tourneyid='$tourneyid' and 
     in_day2 = 1 and 
     day2_semifinal IS NOT NULL 
GROUP BY day2_semifinal 
ORDER BY agegroupid",$connection); 

、私はそれらを反復処理すると、グループ内のすべてのプレーヤー照会ます:私の後に今

$semigroup = $group['day2_semifinal']; 
$playerQuery = mysql_query(" 
SELECT * 
FROM tourneyplayers 
INNER JOIN results 
    on (r_id=resultid) 
INNER JOIN players 
    on (p_id=playerid) 
WHERE tourneyid='$tourneyid' AND 
     day2_semifinal = '$semigroup' and 
     in_day2 = 1 
ORDER BY day2startplace",$connection); 

をテーブルを作成してプレーヤーのクエリのすべてのデータをday2_semifinalにエコーした場合、別のクエリを実行します。

$numberquery = mysql_query("SELECT * FROM tourneyplayers INNER JOIN results on (resultid=r_id) INNER JOIN players ON (p_id=playerid) WHERE tourneyid='$tourneyid' and in_day2 = 1 and day2_additional_nosemi IS NOT NULL AND day2_additional_nosemi <> 0 GROUP BY day2_additional_nosemi ORDER BY agegroupid",$connection); 

最初のものとかなり似ていますが、day2_semifinalの識別子がday2_additionalに変更されています。そのクエリの後、私は再び、day2_additional_nosemiグループを反復処理し、それらの内部のプレイヤーを照会します:

$additionalgroup = $group['day2_additional_nosemi']; 
$playerQuery = mysql_query("SELECT * FROM tourneyplayers INNER JOIN results on (r_id=resultid) INNER JOIN players on (p_id=playerid) WHERE tourneyid='$tourneyid' AND day2_additional_nosemi = '$additionalgroup' and in_day2 = 1 ORDER BY day2startplace",$connection); 

さて、これは動作しますが、これは最初のクエリはagegroupidによってそれらを注文するので、順序で問題を作成しますが、 day2_semifinalのプレーヤーのみ(day2_semifinalと一緒に注文されたday2_additionalのプレイヤーがいます)。私は別のクエリを実行する場合、以前のデータはすでにエコーされており、順序は正しくありません。後で選手を選ぶために、2つの$numberqueryクエリをどのように連結することができますか?

+0

削除mysql_を。セキュリティ上の理由からphp7から削除されましたmysqli_またはpdo –

+0

私は次のプロジェクトでそれに移行します、私はまだ学習中です。私が修正している領域は公開されていません。 – Banana

+0

GROUP BYを使用している間にすべての列を選択しているため、最初のクエリは無効です。最初のクエリで実際に何を集計しようとしていますか? –

答えて

1

私はこれを行う方法を考え出したので私自身の質問に答えています。私が何をしたか、両方のクエリからORDER BYを削除し、2 UNIONと連結し、新しいクエリ作成されました:*

SELECT * FROM (
SELECT * 
FROM tourneyplayers as tp1 
INNER JOIN results as r1 
    on (tp1.resultid=r1.r_id) 
INNER JOIN players as p1 
    ON (p1.p_id=tp1.playerid) 
WHERE tp1.tourneyid=96 and 
     tp1.in_day2 = 1 and 
     r1.day2_semifinal IS NOT NULL 
GROUP BY r1.day2_semifinal 
UNION ALL 
SELECT * 
FROM tourneyplayers as tp2 
INNER JOIN results as r2 
on (tp2.resultid=r2.r_id) 
INNER JOIN players as p2 
ON (p2.p_id=tp2.playerid) 
WHERE tp2.tourneyid=96 and 
tp2.in_day2 = 1 and 
r2.day2_additional_nosemi IS NOT NULL AND 
r2.day2_additional_nosemi <> 0 
GROUP BY r2.day2_additional_nosemi 
) t ORDER BY t.agegroupid; 
関連する問題