PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
ugin_root
Отправлено: 30 Мая, 2018 - 13:46:43
Post Id


Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Май 2011  
Откуда: Киргизия


Помог: 5 раз(а)




Итак есть 3 таблицы:

    Ресторан (restaurant)
    Блюдо (dish)
    Заказ (purchase)

Нужно вывести все рестораны и 2 самых популярных блюда к каждому ресторану. По идее этот запрос должен вывести всё так как положено:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT
  3.         restaurant.id,
  4.         restaurant.`name`,
  5.         dish.`name`
  6. FROM
  7.         restaurant
  8.                 INNER JOIN dish ON dish.restaurant_id = restaurant.id
  9. WHERE dish.id IN (
  10.         SELECT t.id
  11.         FROM (
  12.                 SELECT dish.id, dish.restaurant_id, COUNT(*) AS count
  13.                 FROM dish
  14.                         INNER JOIN purchase ON purchase.dish_id = dish.id
  15.                 GROUP BY dish.id
  16.         ) AS t
  17.         WHERE t.restaurant_id = restaurant.id
  18.         LIMIT 2
  19. )
  20. GROUP BY dish.id
  21.  


Но mysql ругается:
Цитата:
[Err] 1235 - This version of MariaDB doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'


С помощью JOIN это не получилось решить. Какие есть идеи как это сделать?

(Отредактировано автором: 30 Мая, 2018 - 13:48:41)

 
 Top
ugin_root
Отправлено: 01 Июня, 2018 - 06:05:54
Post Id


Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Май 2011  
Откуда: Киргизия


Помог: 5 раз(а)




Пока что сделал так, но это прям костыль
CODE (SQL):
скопировать код в буфер обмена
  1. SET @restaurant_id := NULL;
  2. SET @iterator := NULL;
  3. SELECT
  4.         restaurant.id,
  5.         restaurant.`name`,
  6.         dish.id AS dish_id,
  7.         dish.`name`,
  8.         t.count,
  9.         t.iterator
  10. FROM restaurant
  11.         INNER JOIN dish ON dish.restaurant_id = restaurant.id
  12.         INNER JOIN (
  13.                 SELECT t.*
  14.                 FROM(
  15.                         SELECT
  16.                                 @iterator := IF(@restaurant_id = t.restaurant_id, @iterator + 1, 0) AS iterator,
  17.                                 @restaurant_id := t.restaurant_id AS restaurant_id,
  18.                                 t.id,
  19.                                 t.count
  20.                         FROM (
  21.                                 SELECT dish.id, dish.restaurant_id, COUNT(*) AS count
  22.                                 FROM dish
  23.                                         INNER JOIN purchase ON purchase.dish_id = dish.id
  24.                                 WHERE YEAR(purchase.date_purchase) = YEAR(NOW())
  25.                                 GROUP BY dish.id
  26.                                 ORDER BY dish.restaurant_id ASC, count DESC
  27.                         ) AS t
  28.                 ) AS t
  29.                 HAVING t.iterator <= 3
  30.         ) AS t ON t.id = dish.id
  31. ORDER BY restaurant.id ASC, t.iterator
  32.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB