私はメインテーブル「レストラン」と「レストラン投票」テーブルとの1対多の関係を持っています。 1つのレストランは複数の投票を持つことができます。私たちは名前とJSONレスポンスとしてこのレストランの総合評価を含むすべてのレストランを取得する必要がありますAPI呼び出しのためにリレーショナルデータを数えて計算するためのSQL文
CREATE TABLE `restaurant_votes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_at` datetime NOT NULL,
`user_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`cat_food` int(11) NOT NULL,
`cat_cart` int(11) NOT NULL,
`cat_ambassador` int(11) NOT NULL,
`cat_drinks` int(11) NOT NULL,
`cat_service` int(11) NOT NULL,
`cat_ambience` int(11) NOT NULL,
`cat_price` int(11) NOT NULL,
`restaurant_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `IDX_1B96C91EB1E7706E` (`restaurant_id`),
CONSTRAINT `FK_1B96C91EB1E7706E` FOREIGN KEY (`restaurant_id`) REFERENCES `restaurants` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `restaurants` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
:それは、次のように定義されています。名前などは問題ではありませんが、各レストランの評価を取得するSQLクエリを見つけるのに大きな問題があります。評価は次のように計算されます。
- すべてのカテゴリ(cat_ *)の値(整数1〜5)をサマライズし、カテゴリ(7)の数で除算します。
- 上記の評価の結果をサマライズし、その値をレストランあたりのrestaurant_votesテーブルの評価数で除算します。
- SQLクエリの総合評価をレストラン名とともに返します。
これはSQLでも可能ですか?何かアドバイス?ありがとう!
あなたは何を試しましたか? – OldProgrammer
あなたは1つのステートメントでそれを持っている必要がありますか?どのスクリプト言語を使用してJSONを作成していますか、またはJSON応答を直接提供するSQLサーバーですか? – LuvnJesus
未加工SQLには何もありません。 symfony2フレームワークをWebアプリケーションに使用し、付属のQueryBuilderを使用しました。しかし、QueryBuilderで評価を計算するためのカスタムプロパティにアクセスすることはできません。データセットは〜5000エントリで構成されているため、パフォーマンス上の問題(上記のSQLのほとんどのフィールドが削除されている)のためにレストランテーブルから多くのフィールドを除外する必要があります。これは、findAll()などのレディメイド関数を使用できない理由です。 – Tronic