SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 09.02.2010 15:17:22

Max23
Участник
Зарегистрирован: 09.02.2010
Сообщений: 4

выборка из нескольких таблиц по данным из формы, помогите найти ошибку ;(

Есть несколько таблиц:

`cats`     ( `cid` `catname’)
`city`     (`gid` `gorod` )
`kerlas`     ( `kid `cid  `subcid`  `gid` )
`kerlas_props`     ( `kid` `pid `vid)
`props`     ( `pid`  `subcid`  `propname`  `p_type )
`props_val`     ( `vid  `pid` ‘val’ )
`sub_props`     (`sub_pid``vid``sub)
`subcats`     ( `subcid `cid `subcatname`)

В kerlas – хранятся объявления

Запрос:


SELECT kerlas.*, city.gorod, subcats.subcatname
FROM kerlas
JOIN city ON city.gid = kerlas.gid
JOIN subcats ON subcats.subcid = kerlas.subcid
JOIN cats ON cats.cid = kerlas.cid
$JOIN
WHERE kerlas.type = '1'
$W
ORDER BY kerlas.pdate DESC
 


$JOIN  и $W формируются php на основе данных введенных в форму.
Для примера: форма (сортировка автомобилей) содержит 10 полей (они все селекты, не поля) :
[категория] и [город] - с этим проблем нет
[Год выпуска от]
[Год выпуска До]
[Пробег от]
[Пробег До]
[Тип кузова]
[Тип коробки]
[Тип двигателя]
[Марка автомобиля]

Вопрос: как мне составить запрос, чтобы вывести например:
Авто с [1990] по [2000] с [коробкой автомат]

Таблица свойств: `kerlas_props`  ( `kid` `pid `vid) где kid – id объявления pid – id свойства, vid – id значения свойтсва

Формируется такой запрос:


SELECT kerlas.*, city.gorod, subcats.subcatname FROM kerlas

JOIN city ON city.gid = kerlas.gid
JOIN subcats ON subcats.subcid = kerlas.subcid
JOIN cats ON cats.cid = kerlas.cid
JOIN kerlas_props ON kerlas_props.kid = kerlas.kid

WHERE kerlas.type = '1'
AND (kerlas_props.pid = '2' AND kerlas_props.vid BETWEEN '75' AND '84')
AND (kerlas_props.pid = '4' AND kerlas_props.vid = '132')

ORDER BY kerlas.pdate DESC
 

Как видно формируется невозможное условие .. если поменять в условии AND на OR тогда выводятся все авто которые с [1990] по [2000] с любой коробкой и все годы с автоматом.
Никак не могу понять как это сделать, я не настолько силён в sql, помогите пожалуйста.

Я либо ошибся при составлении самой базы, либо не знаю приёмов sql в данной ситуации, либо ... Ваш вариант.

Отредактированно Max23 (09.02.2010 15:20:13)

Неактивен

 

#2 09.02.2010 18:02:36

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

Re: выборка из нескольких таблиц по данным из формы, помогите найти ошибку ;(

С такой организацией данных — только через самообъединение:
FROM kerlas k1, kerlas k2, …
WHERE (условие k1 => год) AND (условие k2 => автомат) AND (k1.kid = k2.kid).

Но, кажется, организация данных очень неудачная, куда лучше сделать
кучу полей в одной таблице: все равно же в код зашиваете эти pid. В
результате, читаемость кода нулевая, и код неподдерживаемый.

Неактивен

 

#3 09.02.2010 19:56:29

Max23
Участник
Зарегистрирован: 09.02.2010
Сообщений: 4

Re: выборка из нескольких таблиц по данным из формы, помогите найти ошибку ;(

Спасибо за ответ.

paulus написал:

С такой организацией данных — только через самообъединение:
FROM kerlas k1, kerlas k2, …
WHERE (условие k1 => год) AND (условие k2 => автомат) AND (k1.kid = k2.kid).

Я так понимаю в моём случае
FROM kerlas_props k1, kerlas_props k2, …
WHERE (условие k1 => год) AND (условие k2 => автомат) AND (k1.kid = k2.kid).
То есть объединить 1,2,3,4,n раз (k1 k2 k3 kn) столько сколько у меня параметров ?

paulus написал:

Но, кажется, организация данных очень неудачная, куда лучше сделать
кучу полей в одной таблице: все равно же в код зашиваете эти pid. В
результате, читаемость кода нулевая, и код неподдерживаемый.

согласен, что организация не очень удачная, но сделать кучу полей не могу. У меня примерно 700 таких вот свойств для разных категорий товаров.

Отредактированно Max23 (09.02.2010 19:59:16)

Неактивен

 

#4 10.02.2010 18:15:57

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

Re: выборка из нескольких таблиц по данным из формы, помогите найти ошибку ;(

Ого, но заполняются наверняка 1-2. Может, сделать разные таблички просто?
Обобщение — не всегда очень хорошая штука.

А так — да, прийдется для каждого параметра из выборки делать самообъединение.

Неактивен

 

#5 10.02.2010 19:03:07

Max23
Участник
Зарегистрирован: 09.02.2010
Сообщений: 4

Re: выборка из нескольких таблиц по данным из формы, помогите найти ошибку ;(

Ого, но заполняются наверняка 1-2.

Для каждого вида товаров свои свойства. Для авто таких свойств 7, а для сотовых телефонов 1 smile
Я не совсем понял как я могу сделать разные таблички, но и времени на это уже нет .. хотя есть чистый интерес как тут можно сделать по-другому.
Большое спасибо за Ваш совет, с само объединением всё отлично работает!

Неактивен

 

#6 11.02.2010 16:38:44

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

Re: выборка из нескольких таблиц по данным из формы, помогите найти ошибку ;(

Ну, разные таблички == auto (prop1, ... prop7), cellular (prop1), ...

Неактивен

 

#7 11.02.2010 20:23:56

Max23
Участник
Зарегистрирован: 09.02.2010
Сообщений: 4

Re: выборка из нескольких таблиц по данным из формы, помогите найти ошибку ;(

я понял, у меня 52 под категории товаров, соответственно нужно 52 таблички ...но в этом случае , если понадобится добавить свойство, нужно будет добавлять его в саму таблицу. Думаю этот вариант предпочтительнее если не предполагается изменение структуры свойств под категорий да и самих под категорий.

Неактивен

 

Board footer

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