2017-04-08 19 views
0

男性と女性のランキングが異なる2つのテーブルがあります。複数のテーブルの行数をカウントする方法

id | rank | name | surname | totalpoints | lvpoints | itf points 
1 | 1 | Nick | Fisher | 100   | 50  | 50 

テーブルの構造は同じです。 例えば、メンズのテーブルには70行が含まれており、メンズのテーブルのCOUNTを取得するための52

私のコードレディース:

<?php 
$sql = "SELECT COUNT(*) AS count FROM mensranking"; 
$result = mysqli_query($conn, $sql); 
$row = mysqli_fetch_assoc($result); 
$count = $row['count']; 
echo $count; 
?> 

私の目標は、女性のテーブルのメンズテーブル+カウント数122(カウントを取得することです)。

多くのオプション(何がstackoverflowで見つかった)を試しても、何も私のために働いた。

+4

男性と女性が同じテーブルに一緒に格納され、性別の列が付いているようにデータを修正します。 –

答えて

0

以下はあなたのソリューションです。しかし、私はあなたが男性/女性であることを示す新しいフィールドのような性別分布を持つ単一のテーブルを作成することをお勧めします。もう1つのことは、データ要件に基づいて異なるものを使用することです。

SELECT SUM(t.cnt) AS `count` 
    FROM (SELECT COUNT(*) AS cnt FROM womensranking 
      UNION ALL 
      SELECT COUNT(*) AS cnt FROM mensranking 
     ) t 

は多くの選択肢がありますが、このアプローチは、データベースへ単一のクエリ、1回の往復である:

SELECT COUNT(*) 
FROM 
(
    select distinct id from mensranking 

    union all 

    select distinct id from womensranking 
) total_records 
+0

個々の行の中間(派生)テーブルを作成するよりも、2つのテーブルからカウントを取得して組み合わせるほうが効率的です。私たちがちょうど別個のid値のカウントをしたいなら、 'SELECT COUNT(DISTINCT id)AS cnt FROM ...'。 – spencer7593

0

私はこのように、1つのクエリを記述します。

我々は、各テーブルから個々のカウントを取得する必要がある場合は、その後、私はこのようにそれを行うだろうが:

SELECT 'womensranking' AS tbl, COUNT(*) AS cnt FROM womensranking 
    UNION ALL 
    SELECT 'mensranking', COUNT(*) AS cnt FROM mensranking 

その後、両方の行をフェッチします。これは、両方の行(両方のカウント)を取得するためのデータベースへの往復です。

関連する問題