1

私は5つのテーブルカテゴリ、ビジネス、メトロ、ユーザー、お気に入りを持っています

Category
id | category_name
-------------------
 1  | bar
 2  | cafe
 3  | lunch
 4  | dinner

Business
id | business_name | zip        | address            |metro_id
--------------------------------------------------------------
1  | sanders      | 023232      | abc1               | 1
2  | ipc          | 023232      | abc2               | 1
3  | mircleFoods  | 023232      | abc3               | 1
4  | salt         | 023232      | abc4               | 2

Metro
id | name
-------------------
1  | boston
2  | newYork


Favourites
id | user_id | business_id | metro_id | category_id
----------------------------------------------------
1  | 1       | 1           | 3         | 1
2  | 1       | 1           | 4         | 2
3  | 1       | 1           | 3         | 1
4  | 1       | 1           | 5         | 2

User
id | firstName | LastName |userName   | Password
----------------------------------------------------
1  | john   | mark   | jmark1       |123
2  | john  | mark   | jmark2        | 123
3  | john   | mark  | jmark3        | 123
4  | john   | mark  | jmark4        | 123

特定の都市でお気に入りの数が最も多いカテゴリを選択し、そのカテゴリのお気に入りが最大であるビジネス名を表示しようとしています。

私は結果を得ることを望んでいます。

RESULT 1{
Metro->boston
category->bar
businessName->sanders
favs->23}


RESULT 2{
Metro->boston
category->cafe
businessName->sanders
favs->333}

私は多くの異なるクエリを試しましたが、今はそれを分割して実装しようとしています ここに私が試したクエリのいくつかがあります

1.    SELECT c.category_name,b.business_name,COUNT(f.user_id) FROM business b, category c, favourites f
INNER JOIN business ON business.id=favourites.business_id
INNER JOIN category ON category.id=favourites.category_id
GROUP BY c.category_name,b.business_name

2.    SELECT c.category_name,(SELECT COUNT(*) FROM favourites) AS fs,b.business_name FROM(favourites f,business b,category c) GROUP BY c.category_name LIMIT 0,1

3.    SELECT f.category_id, COUNT(f.user_id) AS f FROM (favourites f,metro m)  GROUP BY category_id HAVING MAX(f.user_id)=(SELECT COUNT(user_id) FROM favourites)
4

3 に答える 3

0

これはうまくいくはずです

SELECT c.category_name,b.business_name,COUNT(c.id)
FROM favourites AS f
INNER JOIN business AS b ON business.id=favourites.business_id
INNER JOIN category AS c ON category.id=favourites.category_id
GROUP BY c.id
ORDER BY COUNT(c.id) DESC

これにより、カテゴリごとにお気に入りのエントリがカウントされ、カウント DESC で並べ替えられます

于 2013-04-29T09:25:02.787 に答える