ФорумПрограммированиеPHP для идиотов → Построить сложный sql запрос.

Построить сложный sql запрос.

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 29 апреля 2009 г. 0:59, спустя 1 минуту 22 секунды




    сдела попровачку, что бы читать удобнее было.

    [//code]


    слабоват. учись студент.

    SELECT `puppy_users`.paytipe AS account_type, `puppy_users`.`type` AS user_type,`puppy_listings`.*, ROUND(DATEDIFF(NOW(),FROM_UNIXTIME(`puppy_listings`.birthdate))/31) AS month_count, `puppy_users`.userdata AS owner_data, `puppy_dogtypes`.name AS typename, `geo_countries`.`country_name` as `country_name` , `geo_cities`.`city_name` as `city_name` FROM `puppy_listings` INNER JOIN `puppy_users` ON `puppy_users`.id=`puppy_listings`.owner INNER JOIN `puppy_dogtypes` ON `puppy_dogtypes`.id=`puppy_listings`.type INNER JOIN `geo_countries` ON `geo_countries`.`country_id`= `puppy_listings`.`country_id` INNER JOIN `geo_cities` ON `geo_cities`.`city_id`= `puppy_listings`.`city_id` WHERE `puppy_listings`.`state`!='closed' AND `puppy_listings`.`time`+86400*IF(`puppy_users`.paytipe <> '',IF(`puppy_users`.paytipe='gold',14,21),7) > UNIX_TIMESTAMP(NOW()) AND `puppy_listings`.`price`>=500 ORDER BY `time` DESC LIMIT 3


    SELECT `puppy_users`.paytipe AS account_type, `puppy_users`.`type` AS user_type,`puppy_listings`.*, ROUND(DATEDIFF(NOW(),FROM_UNIXTIME(`puppy_listings`.birthdate))/31) AS month_count, `puppy_users`.userdata AS owner_data, `puppy_dogtypes`.name AS typename, `geo_countries`.`country_name` as `country_name` , `geo_cities`.`city_name` as `city_name` FROM `puppy_listings` INNER JOIN `puppy_users` ON `puppy_users`.id=`puppy_listings`.owner INNER JOIN `puppy_dogtypes` ON `puppy_dogtypes`.id=`puppy_listings`.type INNER JOIN `geo_countries` ON `geo_countries`.`country_id`= `puppy_listings`.`country_id` INNER JOIN `geo_cities` ON `geo_cities`.`city_id`= `puppy_listings`.`city_id` WHERE `puppy_listings`.`state`!='closed' AND `puppy_listings`.`time`+86400*IF(`puppy_users`.paytipe <> '',IF(`puppy_users`.paytipe='gold',14,21),7) > UNIX_TIMESTAMP(NOW()) AND `puppy_listings`.`price`>=500 ORDER BY `time` DESC LIMIT 3

    так не видно что эти 8 строк занимает один запрос))))

    я вот щас пытаюсь вникнуть в "это", и задаю себе вопрос "это дуд мне решил вынести мозг, или дал пищу для раздумия"? :DDD
    ближе к вынести мозг. это запрос с главной страницы на сайте http://puppy.dogs.ru/ в нем много моментов учитывается - платные и бесплтные объявления, продленые и не продленые, сроки, сортировки от вида оплаты .. дохуя всего оодним словом … )))))

    Сапожник без сапог
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 29 апреля 2009 г. 1:01, спустя 1 минуту 46 секунд





    сдела попровачку, что бы читать удобнее было.

    [//code]


    слабоват. учись студент.

    SELECT `puppy_users`.paytipe AS account_type, `puppy_users`.`type` AS user_type,`puppy_listings`.*, ROUND(DATEDIFF(NOW(),FROM_UNIXTIME(`puppy_listings`.birthdate))/31) AS month_count, `puppy_users`.userdata AS owner_data, `puppy_dogtypes`.name AS typename, `geo_countries`.`country_name` as `country_name` , `geo_cities`.`city_name` as `city_name` FROM `puppy_listings` INNER JOIN `puppy_users` ON `puppy_users`.id=`puppy_listings`.owner INNER JOIN `puppy_dogtypes` ON `puppy_dogtypes`.id=`puppy_listings`.type INNER JOIN `geo_countries` ON `geo_countries`.`country_id`= `puppy_listings`.`country_id` INNER JOIN `geo_cities` ON `geo_cities`.`city_id`= `puppy_listings`.`city_id` WHERE `puppy_listings`.`state`!='closed' AND `puppy_listings`.`time`+86400*IF(`puppy_users`.paytipe <> '',IF(`puppy_users`.paytipe='gold',14,21),7) > UNIX_TIMESTAMP(NOW()) AND `puppy_listings`.`price`>=500 ORDER BY `time` DESC LIMIT 3


    SELECT `puppy_users`.paytipe AS account_type, `puppy_users`.`type` AS user_type,`puppy_listings`.*, ROUND(DATEDIFF(NOW(),FROM_UNIXTIME(`puppy_listings`.birthdate))/31) AS month_count, `puppy_users`.userdata AS owner_data, `puppy_dogtypes`.name AS typename, `geo_countries`.`country_name` as `country_name` , `geo_cities`.`city_name` as `city_name` FROM `puppy_listings` INNER JOIN `puppy_users` ON `puppy_users`.id=`puppy_listings`.owner INNER JOIN `puppy_dogtypes` ON `puppy_dogtypes`.id=`puppy_listings`.type INNER JOIN `geo_countries` ON `geo_countries`.`country_id`= `puppy_listings`.`country_id` INNER JOIN `geo_cities` ON `geo_cities`.`city_id`= `puppy_listings`.`city_id` WHERE `puppy_listings`.`state`!='closed' AND `puppy_listings`.`time`+86400*IF(`puppy_users`.paytipe <> '',IF(`puppy_users`.paytipe='gold',14,21),7) > UNIX_TIMESTAMP(NOW()) AND `puppy_listings`.`price`>=500 ORDER BY `time` DESC LIMIT 3

    так не видно что эти 8 строк занимает один запрос))))

    я вот щас пытаюсь вникнуть в "это", и задаю себе вопрос "это дуд мне решил вынести мозг, или дал пищу для раздумия"? :DDD
    ближе к вынести мозг. это запрос с главной страницы на сайте http://puppy.dogs.ru/ в нем много моментов учитывается - платные и бесплтные объявления, продленые и не продленые, сроки, сортировки от вида оплаты .. дохуя всего оодним словом … )))))

    я теперь понял зачем существует отдельная специальность "Проектировка баз данных"
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 29 апреля 2009 г. 1:04, спустя 3 минуты 13 секунд


    ON pt.group.id

    так нельзя :)

    эмм… а вот то что дуд показал запрос, там точно так же делается…
    там походу опечатка pt.group_id
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 29 апреля 2009 г. 1:08, спустя 3 минуты 11 секунд

    mario, я бы тебе показал зачем .. ))))
    Сапожник без сапог
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 29 апреля 2009 г. 1:09, спустя 1 минуту 51 секунду


    mario, я бы тебе показал зачем .. ))))

    еще есть что то страшнее? Оо
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 29 апреля 2009 г. 1:12, спустя 3 минуты 3 секунды

    $sql=mysql_query("SELECT * FROM `properties_table` AS pt
    LEFT JOIN `properties` AS p
    ON pt.group_id='$id' AND pt.property_id=p.id
    WHERE pt.property_id IS NOT NULL ORDER BY pt.position") or die(mysql_error());

    $sql2=mysql_query("SELECT * FROM `properties_table` AS pt
    LEFT JOIN `properties` AS p
    ON pt.group_id='$id' AND pt.property_id=p.id
    WHERE pt.property_id IS NULL ORDER BY p.id") or die(mysql_error());

    вот что то так надо, щас буду пробывать :)
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 29 апреля 2009 г. 1:26, спустя 13 минут 37 секунд

    Unknown column 'pt.property_id' in 'where clause'
    почему он это пишет, если данная колонка существует?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 29 апреля 2009 г. 1:27, спустя 33 секунды


    Unknown column 'pt.property_id' in 'where clause'
    почему он это пишет, если данная колонка существует?
    он лучше знает. верь серверам ;)
    Сапожник без сапог
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 29 апреля 2009 г. 1:28, спустя 1 минуту 35 секунд



    Unknown column 'pt.property_id' in 'where clause'
    почему он это пишет, если данная колонка существует?
    он лучше знает. верь серверам ;)

    ну а как попросить сервера, что бы он увидел эту колонку?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 29 апреля 2009 г. 1:44, спустя 15 минут 42 секунды

    mysql join examples
    Сапожник без сапог
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 29 апреля 2009 г. 1:58, спустя 13 минут 57 секунд

    $sql=mysql_query("SELECT p.*, pt.property_id, pt.group_id, pt.position, pt.serch, pt.range 
    FROM `properties_table` AS pt
    LEFT JOIN `properties` AS p
    ON pt.group_id='$id' AND pt.property_id=p.id
    WHERE pt.property_id IS NOT NULL ORDER BY pt.position") or die(mysql_error());

    $sql2=mysql_query("SELECT p.*, pt.property_id, pt.group_id, pt.position, pt.serch, pt.range
    FROM `properties_table` AS pt
    LEFT JOIN `properties` AS p
    ON pt.group_id='$id' AND pt.property_id=p.id
    WHERE pt.property_id IS NULL ORDER BY p.id") or die(mysql_error());

    сделал так, но один фиг Unknown column 'pt.property_id' in 'field list'
    блин, я чего то недогоняю… :(
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 29 апреля 2009 г. 3:55, спустя 1 час 57 минут 18 секунд

    SELECT pt.*, p.*
           FROM `krot_realty_properties_table` AS pt  LEFT JOIN `krot_realty_properties` AS p
           ON pt.group_id='$id' AND pt.properties_id=p.id
           WHERE pt.properties_id is NOT NULL ORDER BY pt.position

    пиздец я слепой!!! я в шоке…
    SELECT p.*, pt.*
           FROM `properties_table` AS pt
           LEFT JOIN `properties` AS p
           ON pt.group_id='$id' AND pt.property_id=p.id
           WHERE pt.property_id IS NULL ORDER BY p.id

    SELECT pt.*, p.*
           FROM `krot_realty_properties_table` AS pt  LEFT JOIN `krot_realty_properties` AS p
           ON pt.group_id='$id' AND pt.properties_id=p.id
           WHERE pt.properties_id is NOT NULL ORDER BY pt.position
  • ubica

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

    Spritz 29 апреля 2009 г. 8:49, спустя 4 часа 53 минуты 45 секунд

    mario, ночью надо спать)
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 29 апреля 2009 г. 8:50, спустя 1 минуту 17 секунд


    mario, ночью надо спать)

    :)))
    самое смешное, я же еще с вечера начал эту фигню делать… :)
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 29 апреля 2009 г. 22:19, спустя 13 часов 28 минут 26 секунд

    100 раз уже ссылку приводили… http://www.codinghorror.com/blog/archives/000976.html
    https://smappi.org/ - платформа по созданию API на все случаи жизни

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