ФорумРазработкаБазы данных → sql запрос

sql запрос

  • soul

    Сообщения: 790 Репутация: N Группа: Кто попало

    Spritz 25 ноября 2010 г. 12:14

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

    SELECT `area_name` , `street_name` , `house_name` , `price` , `user_login` , `user_skill` , `user_profile_phone`
    FROM `taxi_areas`
    JOIN `taxi_streets_areas` ON `taxi_areas`.`area_id` = `taxi_streets_areas`.`area_id`
    JOIN `taxi_streets` ON `taxi_streets`.`street_id` = `taxi_streets_areas`.`street_id`
    JOIN `taxi_orders` ON `taxi_orders`.`street_id` = `taxi_streets`.`street_id`
    JOIN `taxi_user` ON `taxi_user`.`user_id` = `taxi_orders`.`user_id`
    WHERE `taxi_areas`.`area_name` = 'Центральный'
    LIMIT 0 , 30


    как его оптимизировать и избежать того, чтобы запрос при некоторых условиях не вытягивал лишние данные, например, отобразит данные другого пользователя, если нет необходимого - вечная для меня проблема
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 25 ноября 2010 г. 13:53, спустя 1 час 39 минут 23 секунды

    select
    u.name u_name,
    s.name s_name,
    w.name w_name
    from users u
    join street s
    on u.street_id = s.id – отбираем юзера и улицу его проживания
    and u.id = :USER_ID
    left join users w – LEFT даже, если жены нет, то даные по юзеру нам надо получить
    on u.partner = w.id – если есть жена, то вытяем и её даные

    Если я правильно понял Ваш вопрос. Если не то, то говорите точнее, что у Вас не получается.
    Используйте псевдонимы.
    Используйте псеводнимы при указании полей.
  • soul

    Сообщения: 790 Репутация: N Группа: Кто попало

    Spritz 25 ноября 2010 г. 14:00, спустя 6 минут 47 секунд


    select
    u.name u_name,
    s.name s_name,
    w.name w_name
    from users u
    join street s
    on u.street_id = s.id – отбираем юзера и улицу его проживания
    and u.id = :USER_ID
    left join users w – LEFT даже, если жены нет, то даные по юзеру нам надо получить
    on u.partner = w.id – если есть жена, то вытяем и её даные

    Если я правильно понял Ваш вопрос. Если не то, то говорите точнее, что у Вас не получается.
    Используйте псевдонимы.
    Используйте псеводнимы при указании полей.


    хех, на самом деле мы выводим заказы такси, в зависимости от района, в котором находится клиент

    выводим в виде
    [улица и дом] - [номер телефона] - [имя] - [рейтинг] - [предлагаемая цена]
    Спустя 61 сек.
    LEFT JOIN обычно никак не помогает
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 25 ноября 2010 г. 16:25, спустя 2 часа 24 минуты 59 секунд

    GROUP BY
    Спустя 32 сек.
    или distinct по нужному полю
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 26 ноября 2010 г. 6:08, спустя 13 часов 43 минуты 17 секунд

    soulgarden, провидец с меня хреновый.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!