Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задача: Один сложный запрос 
:(
    Опции темы
CyberPulse
Дата 31.8.2013, 03:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 9.7.2010
Где: Воронеж

Репутация: нет
Всего: нет



Доброй ночи. Вот уже третью ночь не могу спать нормально и мучает меня одна задача, которую я придумал сам для себя.

Введение: функционал как на сайте http://ogoloda.li/search, а именно мы выбираем список продуктов которые у нас есть и нам отображаются рецепты. Я не знаю как конкретно реализовано на данном сайте эта функция и никакого отношения не имею к этому ресурсу.

Условия:
1. нету ajax
2. для получения рецептов в базу можно послать только 1 запрос
3. создание временных таблиц нежелательно
4. Структура таблиц может быть любой

Как я вижу данную структуру (у вас может быть своя):
Таблица 1 - таблица с ингредиентами
Таблица 2 - таблица с рецептами
Таблица 3 - связывающая таблица  Таблицу 1 и Таблицу 2

P.S. Запрос я так и не придумал и не факт что такой запрос можно составить, но что-то мне подсказывает, что решение есть у этой задачи
PM WWW ICQ   Вверх
Sanchezzz
Дата 1.9.2013, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 1
Всего: 60



Привет, надо начать со структуры вы ее придумали ?

здесь более полный мой ответ:
Этот ответ добавлен с нового Винграда - http://vingrad.com

Это сообщение отредактировал(а) Wowa - 1.9.2013, 12:17


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Wowa
Дата 1.9.2013, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Sanchezzz прав.

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM WWW   Вверх
CyberPulse
Дата 1.9.2013, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 9.7.2010
Где: Воронеж

Репутация: нет
Всего: нет



Цитата

   Например выбрать все рецепты которые содержат ингредиенты 1,23,44,66
   

я не совсем понял, а если в рецепте есть еще ингредиенты помимо 1,23,44,66 то такой же рецепт показывать не нужно, а при данном запросе он покажет такой рецепт

p.s. вообще привязываться к этому сайту не нужно и повторять структуру, вопрос больше теоретический чем практичекий

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM WWW ICQ   Вверх
ksnk
Дата 1.9.2013, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



CyberPulse, Что за проблема-то? В такой комбинации таблиц получается долго и мутно.

Таблицы 
рецепты - recipe[id,Name,Description], 
ингридиенты ingredient[id,Name,Description], 
связь links[id,rId,iId]
ключики тривиальны и неинтересны

пришел набор ингридиентов в виде массива ID шек (таблица ingredient, получается, не нужна ;) ) величиной , к примеру,  5 штук.

Код

select * from recipe as r 
  join link as l1 on r.id=l1.rId
  join link as l2 on r.id=l2.rId
  join link as l3 on r.id=l3.rId
  join link as l4 on r.id=l4.rId
  join link as l5 on r.id=l5.rId
where
  l1.iId=:ID1
 and l2.iId=:ID2
 and l3.iId=:ID3
 and l4.iId=:ID4
 and l5.iId=:ID5

?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
CyberPulse
Дата 1.9.2013, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 9.7.2010
Где: Воронеж

Репутация: нет
Всего: нет



я так понял, сколько ингредиентов столько и джойнов?

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM WWW ICQ   Вверх
Sanchezzz
Дата 1.9.2013, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 1
Всего: 60



Цитата

p.s. вообще привязываться к этому сайту не нужно и повторять структуру, вопрос больше теоретический чем практичекий

Не че страшного зато есть база отчего оттолкнутся.
Цитата

я так понял, сколько ингредиентов столько и джойнов?
 сорее всего да, я так раньше делал когда EAV прицеп БД использовал. 

Лучше тогда условия перебрать AND AND чем большое количество JOIN делать, скорее всего  быстрее будет. 





--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
ksnk
Дата 1.9.2013, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



Цитата(CyberPulse @  1.9.2013,  13:18 Найти цитируемый пост)
я так понял, сколько ингредиентов столько и джойнов?

Для такой организации таблиц - да.

Если в таблицу рецептов вставить поле с перечислением всех  ингридиентов через запятую (отсортированные по возрастанию ID), то для ЭТОЙ задачи получится простой запрос. 

Нужно понять, какие задачи решаются и для них (задач) смастерить правильную структура данных.



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
CyberPulse
Дата 1.9.2013, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 9.7.2010
Где: Воронеж

Репутация: нет
Всего: нет



Цитата

   Если в таблицу рецептов вставить поле с перечислением всех  ингридиентов через запятую (отсортированные по возрастанию ID), то для ЭТОЙ задачи получится простой запрос. 
   

мне кажется это не очень правильная структура базы

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM WWW ICQ   Вверх
CyberPulse
Дата 1.9.2013, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 9.7.2010
Где: Воронеж

Репутация: нет
Всего: нет



Способ от ksnk понравился, единственное не нравится изменяющийся кол-во джойнов, может есть еще какие идеи?

Цитата

   Нужно понять, какие задачи решаются и для них (задач) смастерить правильную структура данных.
   

задача - это составить красивый запрос с красивой структурой базы, на практике я понимаю что красиво не реализовать, либо пострадает производительность, потому задача - это сделать красиво

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM WWW ICQ   Вверх
CyberPulse
Дата 1.9.2013, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 9.7.2010
Где: Воронеж

Репутация: нет
Всего: нет



http://sqlfiddle.com/#!2/8f274/4 посмотрите что я делаю не так, выдает только один рецепт, хотя по ингредиентам подходит два

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM WWW ICQ   Вверх
CyberPulse
Дата 1.9.2013, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 9.7.2010
Где: Воронеж

Репутация: нет
Всего: нет



Код

select * from recipe as r
  join link as l1 on r.id=l1.rId
  join link as l2 on r.id=l2.rId
  join link as l3 on r.id=l3.rId
  join link as l4 on r.id=l4.rId
  join link as l5 on r.id=l5.rId
where
  l1.iId=:ID1
and l2.iId=:ID2
and l3.iId=:ID3
and l4.iId=:ID4
and l5.iId=:ID5

как то не работает этот запрос

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM WWW ICQ   Вверх
ksnk
Дата 1.9.2013, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



Вот сейчас по ингридиентам подходит два


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
CyberPulse
Дата 1.9.2013, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 9.7.2010
Где: Воронеж

Репутация: нет
Всего: нет



А вот так тоже два рецепта, хотя должен быть один

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM WWW ICQ   Вверх
CyberPulse
Дата 1.9.2013, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 9.7.2010
Где: Воронеж

Репутация: нет
Всего: нет



результат запроса должен показать мне список рецептов, которые я могу приготовить из продуктов которые уже имеются

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0566 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.