SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 03.03.2009 11:44:46

Nt.Mag1steR
Участник
Зарегистрирован: 03.03.2009
Сообщений: 3

Вопрос по логике

Здраствуйте, ув. эксперты. Есть такой вопрос по MYSQL

Имеются 2 таблицы:

1. Типы походов (id, цена, продолжительность, сезон...)
2. Конкретные даты походов (id, id_типа_похода, цена, дата_начала, дата_конца, сезон...)

Тоесть логика в том, что конкретные даты походов по умолчанию перенимают некоторые данные из типа похода, но могут также иметь и отличные варианты.
Для чего так сделано? Если поход пользователя устраивает, но не устраивает не одна из предлагаемых дат, он может записаться в тип похода, указав желаемые даты. При создании такой даты, он туда переносится.

Мне нужно провести поиск типа похода, по разным характеристикам (к примеру цена). Результатом должен стать список типов походов, которые подходят.

Тоесть к примеру я ищу все походы, цена которых >20$, но у меня находит только те типы походов, у которых ЕСТЬ конкретные даты. Если таких дат пока нет, то не ищется. Как сделать, чтобы искало нормально?


Ищу так:
SELECT hike_type.id FROM hike_type LEFT OUTER JOIN hike ON hike_type.id=hike.hike_type_id WHERE hike.cost > 20 Group by hike_type.id

Мне нужно получить id тех типов походов, которые удовлетворяют условию.

Неактивен

 

#2 03.03.2009 12:31:22

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Вопрос по логике

Ищите просто по типам, а не по походам?

SELECT id FROM hike_type WHERE cost > 20

Неактивен

 

#3 03.03.2009 12:45:47

Nt.Mag1steR
Участник
Зарегистрирован: 03.03.2009
Сообщений: 3

Re: Вопрос по логике

^_^ конечно решение класс, но не подходит. Дело в том, что поиск может производится по mincost, maxcost, datestart, dateend, rating, leader_id, hike_region.
Из них:
mincost, maxcost (тоесть cost) есть И в hike И в hike_type
datestart, dateend,leader_id есть только в hike
rating, hike_region есть только в hike_type



Впринципе как мне кажется придется юзать VIEW, и в нем использовать CASE. Но я не могу придумать как, help pls

Отредактированно Nt.Mag1steR (03.03.2009 12:46:41)

Неактивен

 

#4 03.03.2009 14:16:58

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Вопрос по логике

Тогда Вам нужна более умная логика на стороне клиента (для выборки из двух таблиц) или
представление (но тогда оно будет тормозить, создавая временные таблички)

CREATE VIEW vname AS
SELECT * FROM hike
UNION
SELECT *, NULL, NULL, ... FROM hike_type

Неактивен

 

#5 07.03.2009 08:45:12

Nt.Mag1steR
Участник
Зарегистрирован: 03.03.2009
Сообщений: 3

Re: Вопрос по логике

спасибо. Помогло

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson