1

一部の製品は他の製品とは異なる属性を持っているため、異なる製品を表すためにいくつかのテーブルをセットアップしました。

特定の都市からリストされているアイテムの数を数えようとしています。私のSQL文は次のとおりです。

Select count(*) as count from location, tbl_books where location.city = tbl_books.location && location.city = 'London' && location.country = 'United Kingdom'

Select count(*) as count from location, tbl_clothes where location.city = tbl_clothes.location && location.city = 'London' && location.country = 'United Kingdom'

これはループして、国内のすべての都市の結果をカウントします。これらのループは内側のループを表します。外側のループは、さまざまなカテゴリ テーブルをループします。

これはあまり効率的ではなく、誰かがこの問題に対処する方法を提案できるかどうか疑問に思っていました. 都市とカテゴリ フィールドを含むマスター テーブルを作成し、特定の都市から新しいアイテムが追加されるたびにマスター テーブルのカウントを増やすことだけを考えていました。

4

3 に答える 3

1

次の SQL クエリは、location table.city キーと tbl_books.location キーを結合することにより、count 値と location.city 値を 1 つのクエリとして返します。

Select count(*) as count, location.city 
from location, tbl_books 
where location.city = tbl_books.location
group by location.city
于 2012-06-12T20:13:22.357 に答える
1

これは、英国のすべての都市について、都市ごとにすべての本を合計します(私の頭から離れて、テストされていません):

select tbl_books.location, count(tbl_books.location) as count
from location inner join tbl_books on location.city = tbl_books.location
where location.country = 'United Kingdom'
group by tbl_books.location

結果は次のようになります。

location  |  count
--------------------
London    |  5
--------------------
Newcastle |  1
--------------------
...       | ...
于 2012-06-12T20:14:17.630 に答える
1

このクエリは、すべての都市と国の本の数を返します。ループは必要ありません。

SELECT 
    location.country, 
    location.city,
    COUNT(*) as `count` 
FROM locaton
INNER JOIN tbl_books ON location.city = tbl_books.location 
GROUP BY location.country, location.city
ORDER BY location.country, location.city

結果は次のようになります。

country          |   city    |   count
-----------------+-----------+-----------
France           | Paris     |  1
United Kingdom   | Belfast   |  2
United Kingdom   | London    |  3
...
于 2012-06-12T20:16:21.697 に答える