У меня есть главный стол «Рестораны» и отношение «один ко многим» к таблице «RestaurantVotes». Один ресторан может иметь несколько голосов. Он определяется следующим образом:SQL-Statement для подсчета и вычисления реляционных данных
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;
Для API-вызова, мы должны получить все рестораны, включая имя и общий рейтинг для этого ресторана в ответ JSON. Название и т. Д. Не проблема, но у нас есть большие проблемы, чтобы найти SQL-запрос, который получает рейтинг для каждого ресторана. Оценка рассчитывается следующим образом:
- Остановить значения (целое число 1-5) всех категорий (cat_ *) и разделить их на количество категорий (7).
- Остановите результат оценок выше и разделите значение на количество оценок в таблице restaurant_votes за ресторан.
- Возвратите общий рейтинг от 2. в SQL-запросе вместе с названием ресторана.
Возможно ли это, используя SQL? Любой совет? Благодаря!
Ну, что вы пробовали? – OldProgrammer
Вам нужно иметь его в одном заявлении? Какой язык сценариев используется для создания JSON или ваш SQL-сервер, предоставляющий ответы JSON напрямую? – LuvnJesus
Ничего в сыром SQL. Мы используем структуру symfony2 для нашего webapp и использовали включенный QueryBuilder. Но мы не можем получить доступ к настраиваемому свойству для вычисления рейтинга в QueryBuilder. Набор данных состоит из ~ 5000 записей, поэтому из-за проблем с производительностью необходимо исключить многие поля из таблицы ресторанов (я удалил большинство полей в sql выше). И именно по этой причине мы просто не можем использовать готовые функции, такие как findAll() и т. Д. – Tronic