За последние 24 часа нас посетили 17168 программистов и 1300 роботов. Сейчас ищут 1577 программистов ...

создание запроса

Тема в разделе "MySQL", создана пользователем smails, 19 янв 2007.

  1. smails

    smails Активный пользователь

    С нами с:
    24 июл 2006
    Сообщения:
    231
    Симпатии:
    0
    Адрес:
    Москва
    Здрасти!
    есть таблица, в неё поля значение 1 и значение 2

    мне нужно вывести все эти значения и их сумму, отсортировав по сумме, и чтоб эта сумма не привышала, например 5
    Делаю так:

    select значение_1, значение_2, значение_1 + значение_2 as sum
    from table
    where sum <= 5
    order by sum desc

    пишет что типо поля sum нет... как решить проблему?
     
  2. smails

    smails Активный пользователь

    С нами с:
    24 июл 2006
    Сообщения:
    231
    Симпатии:
    0
    Адрес:
    Москва
    ау..((
    а хотябы есть какойнибудь оператор для остановки? например break;?
     
  3. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    select значение_1, значение_2, значение_1 + значение_2 as sum
    from table
    where (значение_1 + значение_2) <= 5
    order by sum desc
     
  4. smails

    smails Активный пользователь

    С нами с:
    24 июл 2006
    Сообщения:
    231
    Симпатии:
    0
    Адрес:
    Москва
    нет, не получается...
    пишет неправильно используется ф-ция группировки
     
  5. smails

    smails Активный пользователь

    С нами с:
    24 июл 2006
    Сообщения:
    231
    Симпатии:
    0
    Адрес:
    Москва
    ну как быть?..
    мож есть что-то типо этого:

    select значение_1, значение_2, @per = (значение_1 + значение_2) as sum
    from table
    where @per <= 5
    order by sum desc

    это только привёл пример, что возможно есть что-то подобное...
     
  6. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    Вот это у меня заработало

    SELECT z1+z2 as s FROM `Table` WHERE (z1+z2)<=5 ORDER BY s ASC
     
  7. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    У меня работает. Напиши свой запрос как есть:может в чем-то еще дело.
     
  8. smails

    smails Активный пользователь

    С нами с:
    24 июл 2006
    Сообщения:
    231
    Симпатии:
    0
    Адрес:
    Москва
    Ну да, возможно я не учёл, что мой запрос значительно сложнее..
    вот он:
    select id_site, count(DISTINCT id_us) as hosts, sum(all_click) as hits, count(DISTINCT id_us) * 1000 + sum(all_click) * 100 as rev
    from links_click_str
    group by id_site
    order by rev desc

    структура таблицы:
    id int(11) auto_increment
    id_site int(11)
    id_str int(11)
    id_us int(11)
    all_click int(11)
     
  9. smails

    smails Активный пользователь

    С нами с:
    24 июл 2006
    Сообщения:
    231
    Симпатии:
    0
    Адрес:
    Москва
    ну как быть?..
    может лучше не стоит это придумавать, а обработать всё выведенное в php?
    Но если у меня 60000 записей, то помоему придумать, чтоб выводились те, которые нужны только в sql...
    а если вывести всё, а потом отбросить лишнее путём php будет очень напрягать проц?..
    Как поступить?..
     
  10. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    smails
    select id_site, count(DISTINCT id_us) as hosts, sum(all_click) as hits, count(DISTINCT id_us) * 1000 + sum(all_click) * 100 as rev
    from links_click_str
    group by id_site
    order by (count(DISTINCT id_us) * 1000 + sum(all_click) * 100) desc
    не работает?

    Хотя запрос получается зверский. Надо подумать, как его лучше сделать. Условия where есть?
     
  11. smails

    smails Активный пользователь

    С нами с:
    24 июл 2006
    Сообщения:
    231
    Симпатии:
    0
    Адрес:
    Москва
    ты не правильно понял...
    отсортировать то без проблем получается...
    select id_site, count(DISTINCT id_us) as hosts, sum(all_click) as hits, count(DISTINCT id_us) * 1000 + sum(all_click) * 100 as rev
    from links_click_str
    where rev < 1100 # вот что я хочу
    group by id_site
    order by rev desc #вот тебе сортировка

    Одним словом мне нужно, чтоб он вывел все строки, при которых rev или (count(DISTINCT id_us) * 1000 + sum(all_click) * 100) был меньше определённого значения
    Запрос помоему нормальный, были и подлиннее, хотя и оптимизированные по максимуму)) этот запрос даже не всё, что я хотел, он - макет для полного запроса)
     
  12. smails

    smails Активный пользователь

    С нами с:
    24 июл 2006
    Сообщения:
    231
    Симпатии:
    0
    Адрес:
    Москва
    я вот тут шарил по документации, в поисках чегото типо этого:

    select id_site, count(DISTINCT id_us) as hosts, sum(all_click) as hits, @per = (count(DISTINCT id_us) * 1000 + sum(all_click) * 100) as rev
    from links_click_str
    where @per < 1100
    group by id_site
    order by rev desc

    Где @rev - переменная, которой присваиваются значения в процессе цикла вывода информации... Как на простом языке программирования)
    но тот запрос, который я сейчас написал, не работает...
    Да и не должен) т. к. в документации написано так:

    set @rev = 'Значение';

    Где это один запрос просто... в цыкле вывода никакх присвоений переменной я не нащёл что-то...
    Ты не в курсе такого метода?

    Кстати, не знаешь как сделать типо этого:

    select ++@per;

    где @per = переменная, меняющая своё значение в процессе вывода, точнее это типо этого:

    while (условие....){
    $i++;
    }
     
  13. Anonymous

    Anonymous Guest

    блин. Используйте SQL по его прямому назначению.
     
  14. smails

    smails Активный пользователь

    С нами с:
    24 июл 2006
    Сообщения:
    231
    Симпатии:
    0
    Адрес:
    Москва
    Горбунов Олег, по какому прямому?? Вывести всё, и работать с php??
    Нерационально, накладно и грузит систему!!! И вообще такой метод только для маньяков.
     
  15. Anonymous

    Anonymous Guest

    Чепуха. Где факты?
    Если попал в акую ситуацию — значит что то не продумал, и плохо спланировал.
     
  16. simpson

    simpson Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
  17. smails

    smails Активный пользователь

    С нами с:
    24 июл 2006
    Сообщения:
    231
    Симпатии:
    0
    Адрес:
    Москва
    Тебе лучше вывести 60000 строк, при этом обработав и отбросив 99 % с помощью php, или остановить цикл вывода информации на нужной "остановке"?? Например мне нужны только 3 первые из 60000 строк?
    Зачем я буду напрягать систему, если можно этого не делать...
    и как это по прямому назначению? Что ты имел ввиду, когда есть огромное колличество функций?
     
  18. simpson

    simpson Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    какой цикл? сам понял, что сказал?
     
  19. smails

    smails Активный пользователь

    С нами с:
    24 июл 2006
    Сообщения:
    231
    Симпатии:
    0
    Адрес:
    Москва
    simpson я имел ввиду остановить вывод на 3 строках... а ты как бы поступил?! Тем способом, о котором я говорил?!
    Ладно, чувствуя наезд на того, кто задал вопрос - для вас его решение, если не знаете как он решается...
     
  20. simpson

    simpson Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Код (Text):
    1. SELECT ... LIMIT 3
     
  21. smails

    smails Активный пользователь

    С нами с:
    24 июл 2006
    Сообщения:
    231
    Симпатии:
    0
    Адрес:
    Москва
    simpson, почитай внимательнее о чём идёт речь!
     
  22. Anonymous

    Anonymous Guest

    про LIMIT читать не пробовал?
    SQL = Stuctured Query Language (Структурированый Язык Запросов) — он изначально, потенциально, и логически предназначен, и что гораздо более важно, ОПТИМИЗИРОВАН, для выборки данных отвечающих определенным условиям из реляционной БД, на основании указания ограничений, приложимых к реляциям полей. И все. Использовать его для расчетов — не нужно. Гораздо лучше использовать голову, и спланировать БД так, что бы выборка была максимально простой, а значит — максимально быстрой.
     
  23. smails

    smails Активный пользователь

    С нами с:
    24 июл 2006
    Сообщения:
    231
    Симпатии:
    0
    Адрес:
    Москва
    Горбунов Олег, почитай внимательнее о чём идёт речь!
     
  24. Anonymous

    Anonymous Guest

    я вижу только, что ты спрашивал об одном, а на самом деле тебе нужно было другое. А в самом первом запросе проблема была в том, что SUM — зарезервированное слово. А в остальном — ты решаешь проблему удалением гланд через ж..у. Спланировать базу надо правильно, вот и все. Прочитай определение SQL еще раз. И осмысли. Не поможет, прочитай теорию реляционных БД.
     
  25. smails

    smails Активный пользователь

    С нами с:
    24 июл 2006
    Сообщения:
    231
    Симпатии:
    0
    Адрес:
    Москва
    о чём об одном?..
    я спрашивал как вывести все строки, при который значения (count( DISTINCT id_us ) *1000 + sum( all_click ) *100) меньше определённого числа.
    И не стоит писать мне про свои определения! Ничего мудрёного тут нет!
    Не знаешь как это делается - так и скажи.
    Вижу ты владеешь только основами и определениями...