![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 3 Всего: 137 |
И для показа и для поиска, в том-то и дело.
|
|||
|
||||
| Aliance |
|
||||||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 3 Всего: 137 |
Делаю такой запрос:
Он мне возвращает 2 ряда: "654";"3";"8";"3";"Кора Змеиного Дерева";"mater10";"1.00";"1";"0/1" "654";"18";"1";"18";"Эссенция Глубины";"mater21";"1.00";"1";"0/1" Из них я могу увидеть, какие ингридиенты и в каком количетсве нужны для покупки вещи с id 654 (в данном случае это 3 предметов с id 3 и 1 предмет с id 18). Гуд. Как дальше построить запрос поиска тех людей, у кого оба этих предмета присуствуют в количестве равном или большем, чем необходимо - не знаю. Если б с 1 предметом - легко, таким запросом:
Он выведет всех, у кого предмет с id 3 есть в количестве больше или равно 8. Но проблема в том, что для покупки предмета с id 654 мне нужно 2 предмета (id 3 и 18), а этим запросом я узнаю только про 1 предмет. Тоесть нужно убьединить запросы
И выбрать все уникальные member_id. Как? Дамп нужной части таблиц кинуть? Помогите пожалуйса, сам не справляюсь. |
||||||
|
|||||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 11 Всего: 261 |
||||
|
||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 3 Всего: 137 |
||||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 11 Всего: 261 |
Делаешь так. Одно поле, как я сказал - сам через строку:
Делаешь еще одно поле, SET'ом, и закидываешь туда те mater'ы, что есть у предмета. Поиск ведешь по второму полю. Очень быстро и удобно. Работаешь с первым полем, не забывая обновлять второе (если какой-ть mater добавляется или удаляется). Запрос совсем не сложный. |
|||
|
||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 3 Всего: 137 |
Mal Hack, не, мне не нравится. Я, во-первых, плохо понимаю такую структуру, а соотв. это считай все равно что пользоваться готовым скриптом. Чужое, не понятное. Ну а во-вторых, мне кажется слишком много гемора будет нести такое хранение (редактирование например).
Был бы признателен, если б вы мне помогли с тем, что уже у меня есть, потому как я это все сделал сам и понимаю. Просто знаних не хватает составить запросы и логику правильно. |
|||
|
||||
| Sardar |
|
||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: нет Всего: 317 |
В простейшем решении собрать все ингридиенты в UNION. Но тогда придёться строить такой запрос самому в момент исполнения скрипта, что не есть гуд по определению.
Вроде можно и так:
Возвращает народ имеющих нужные компоненты в достаточном количестве. Если в ответе будут null, значит есть компоненты (добавь eitems.ditem_id что бы знать какие), которых ни у кого нет. DISTINCT нужен т.к. один member.id может иметь кучу ингридиентов из рецепта (если в рецепте используеться куча). Или так если инфа из dungeon_items (окромя id) нужна:
Возможно мускул будет ругаться на AS, также возможно 5ый может ругаться на второй запрос (там JOIN'ы вроде стали жёще, нельзя просто eitems.required_quantity <= member.quantity, попробуй). -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||
|
|||||
| Aliance |
|
||||||||||||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 3 Всего: 137 |
Sardar, опа, спасибо, уже ближе как мне кажется к истине.
Немного подправил запрос:
Он мне вернул:
Вот структура таблиц:
|
||||||||||||
|
|||||||||||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: нет Всего: 317 |
Видать хорошую дурь принимает автор названий ингридиентов (похоже рандмно скрипт генерит по словарю)
Вроде всё правильно вывел, Вбей в селект: "member.id, eitems.*", да на quantity проверке поставь <=, это я опечатался, поправил, а ты уже успел использовать (реально пару минут стояло -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Aliance |
|
||||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 3 Всего: 137 |
такого быть не может, такое наверное member.member_id Нет не то, смотри, он мне выдает что у 5 пользователей есть все ингридиенты, пользовательские id - 9, 151, 34, 63, 12
А на самом деле нужно чтобы были только 2 юзера - 9 и 151 ведь только у них есть оба предмета в нужном кол-ве!
|
||||
|
|||||
| Sardar |
|
||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: нет Всего: 317 |
Угу, мой первый запрос будет возвращать id всех людей, имеющих хотя бы один из компонентов в достаточном количестве.
Можно группировать и выфильтровывать народ не имеющих всех id с ингридиентами, правда их нужно в начале из рецепта выцепить. Т.е. два запроса:
В первом запросе INNER JOIN не нужен если у тебя битых ссылок нет (т.е. энциклопедия всегда ссылаеться на существующие компоненты). Если БД поддерживает вложенные запросы, то можно так:
Это сообщение отредактировал(а) Sardar - 11.1.2007, 04:30 -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||
|
|||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 11 Всего: 261 |
Ну и зря... |
|||
|
||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 3 Всего: 137 |
Sardar, первый запрос возвращает 2, как и должен. Второй - работает отлично! Спасибо огромное!
Кстати, третий вопрос возвращает:
Хотя вроде мускул поддерживает вложенные запросы... У меня он 4ка. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |