Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

как правильно составить sql запрос

647
14 ноября 2012 года
vital
73 / / 22.03.2003
Добрый день, уважаемые ГУРУ, подскажите начинающему как модернизировать / оптимизировать запрос.

Имеем:
SELECT id, operation, object, street, house, region, landmark,
furniture, washer, heater, fridge, tv, internet, window, shower, balcony, toilet,
price, pay_period, floor, floors, wall_material, all_area, living_area, kitchen_area, layout,
description, url, phone, source
FROM real_estate WHERE operation = '$tip_sdelki' AND object = '$object'
AND create_date >= SUBDATE(CURDATE(), INTERVAL 7 DAY)
AND url !=''
ORDER BY object, region, price

Нужно:
Тот же запрос, но чтобы выводимые данные были уникальны по набору полей: object, street, house

добавление в конец GROUP BY object, street, house - выдает ошибку

???
8
14 ноября 2012 года
mfender
3.5K / / 15.06.2005
Есть в SQL DISTINCT() и есть подзапросы SELECT. Есть ещё условия.
Единственное чего нет - телепатов на этом форуме.
647
14 ноября 2012 года
vital
73 / / 22.03.2003
разве данных недостаточно?

ок, вот такая конструкция:
SELECT id, operation, DISTINCT(object, street, house), region, landmark,
furniture, washer, heater, fridge, tv, internet, window, shower, balcony, toilet,
price, pay_period, floor, floors, wall_material, all_area, living_area, kitchen_area, layout,
description, url, phone, source
FROM real_estate WHERE operation = '$tip_sdelki' AND object = '$object'
AND create_date >= SUBDATE(CURDATE(), INTERVAL 7 DAY)
AND url !=''

не работает - ошибка в синтаксисе, а вот как правильно написать не знаю, единственное предположение - разбивать на несколько запросов в скрипте.
412
14 ноября 2012 года
grgdvo
323 / / 04.07.2007
У вас ошибка в логике.... Ограничимся четырьмя полями в ваших данных. Например, есть такие данные


 
Код:
object     street   house   region
  ..............
  obj1     Иванова    5     область1
  obj1     Иванова    5     область2
  ..........
Вы хотите, чтобы object, street и house были уникальны при этом не оторваны от остальных полей. Вопрос, как система должна догодаться, какой из region выбрать для уникальной группы (object, street, house)? Какой бы вы region выбрали?
8
14 ноября 2012 года
mfender
3.5K / / 15.06.2005
Ну такой-то DISTINCT явно не катит.
Когда я писал про телепатов, я имел ввиду, что данных вообще нет. Не отчего оотолкнуться. Был бы дамп какой-то, можно было бы понять о чём речь.
647
14 ноября 2012 года
vital
73 / / 22.03.2003
да любой region, первый попавшийся.

grgdvo, прав говоря что для одной уникальной записи по перечисленным полям могут быть разные значения по оставшимся полям.
я пробовал на другой таблице с использованием GROUP BY так там как раз выбирались первые уникальные записи остальные просто отбрасывались. Я конечно могу приложить пару строчек из таблицы для примера.
385
14 ноября 2012 года
SomewherSomehow
477 / / 25.07.2004
Субд и ошибку надо угадывать видимо? Если у вас есть группа, сгруппированная по object, street, house, а оставльные поля отличаются, тоже нужно угадать?
Как вам сказали, телепатов нет...=)

Допустим, после группировки получилось две группы:
Код:
grp1:
object  street  house   id
1       1       1       1
1       1       1       2
1       1       1       3
grp2:
object  street  house   id
2       2       2       4
2       2       2       5
2       2       2       6
...
Тогда вот такой запрос:
Код:
select
    re.* --тут список полей с альясами
from
    real_estate as re
    join (
        select
            max(id) as maxid,
            object,
            street,
            house          
        from
            real_estate
        where
            operation = '$tip_sdelki'
            and object = '$object'
            and create_date >= subdate(curdate(), interval 7 day)
            and url !=''   
        group by
            object,
            street,
            house
    ) as rem on
        rem.maxid = re.id and
        rem.object = re.object and
        rem.street = re.street and
        rem.house = re.house
order by
    re.object, re.region, re.price
Выведет вам строки
1 1 1 3
2 2 2 6
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог