4

異なる製品ブランドのデータベースに 2 つのテーブルがあり、それらの数を取得しようとしています。これにより、説明検索で両方の数が結合されます。私がこれまでに持っているのはこれです:

$pages_query = mysql_query ("SELECT COUNT('Product Number') FROM brand1 WHERE description LIKE '%oven%' UNION ALL SELECT COUNT('Product Number') FROM brand2 WHERE description LIKE '%oven%'") ;

これをエコーすると、60 が吐き出されます。これは、brand1 テーブルのみの結果であり、brand2 テーブルからのカウントを追加しません (UNION ALL が行うべきだと思っていたのですか、それとも間違っているのでしょうか?)。他のテーブルには、このクエリに一致する結果が 113 件あるため、173 になります。

カウント結果を 1 つの数値に加算する最良の方法はどれですか?

ありがとう。

4

2 に答える 2

3

Aは、別々のカウントごとに 1 つずつ、UNION2 つのrowsを提供する必要があります。2 つの合計が必要な場合は、それらをサブセレクトに追加できます。

SELECT
  /* Add these two counts together and alias as total_count */
  (SELECT COUNT(*) FROM brand1 WHERE description LIKE '%oven%') 
  + (SELECT COUNT(*) FROM brand2 WHERE description LIKE '%oven%) AS total_count

MySQL は句の内容または存在について寛大であるFROMため、句を省略してSELECT.

補足としてbrand. 代わりに、ブランドを識別する列を持つ1 つのテーブルにこれらを結合する必要があります。あなたが今そのような変化を起こす立場にあるなら、それはあなたの人生を大幅に簡素化する可能性があります.

于 2012-12-03T00:23:24.777 に答える
2

UNION を実行すると、カウントごとに行が作成されます。これら 2 つの行の SUM を取得する必要があります。

ところで、あなたは COUNT('Product Number') を選択していました - これはすべての意図と目的で COUNT(1) と同じです。null 以外の値について特定の列をチェックする場合は、その列に名前を付ける必要があります。が列の名前である場合Product Numberは、バックティック (`) でカプセル化する必要があります。通常の一重引用符 (') は単に文字列を定義するだけです。

$sql = "SELECT SUM(rowcount)
        FROM (
            SELECT COUNT(1) AS rowcount 
            FROM brand1 
            WHERE description LIKE '%oven%' 
            UNION ALL 
            SELECT COUNT(1) 
            FROM brand2 
            WHERE description LIKE '%oven%'
        ) AS counts";
$pages_query = mysql_query ($sql) ;
于 2012-12-03T00:23:26.453 に答える