Здрасти! есть таблица, в неё поля значение 1 и значение 2 мне нужно вывести все эти значения и их сумму, отсортировав по сумме, и чтоб эта сумма не привышала, например 5 Делаю так: select значение_1, значение_2, значение_1 + значение_2 as sum from table where sum <= 5 order by sum desc пишет что типо поля sum нет... как решить проблему?
select значение_1, значение_2, значение_1 + значение_2 as sum from table where (значение_1 + значение_2) <= 5 order by sum desc
ну как быть?.. мож есть что-то типо этого: select значение_1, значение_2, @per = (значение_1 + значение_2) as sum from table where @per <= 5 order by sum desc это только привёл пример, что возможно есть что-то подобное...
Ну да, возможно я не учёл, что мой запрос значительно сложнее.. вот он: 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)
ну как быть?.. может лучше не стоит это придумавать, а обработать всё выведенное в php? Но если у меня 60000 записей, то помоему придумать, чтоб выводились те, которые нужны только в sql... а если вывести всё, а потом отбросить лишнее путём php будет очень напрягать проц?.. Как поступить?..
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 есть?
ты не правильно понял... отсортировать то без проблем получается... 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) был меньше определённого значения Запрос помоему нормальный, были и подлиннее, хотя и оптимизированные по максимуму)) этот запрос даже не всё, что я хотел, он - макет для полного запроса)
я вот тут шарил по документации, в поисках чегото типо этого: 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++; }
Горбунов Олег, по какому прямому?? Вывести всё, и работать с php?? Нерационально, накладно и грузит систему!!! И вообще такой метод только для маньяков.
Тебе лучше вывести 60000 строк, при этом обработав и отбросив 99 % с помощью php, или остановить цикл вывода информации на нужной "остановке"?? Например мне нужны только 3 первые из 60000 строк? Зачем я буду напрягать систему, если можно этого не делать... и как это по прямому назначению? Что ты имел ввиду, когда есть огромное колличество функций?
simpson я имел ввиду остановить вывод на 3 строках... а ты как бы поступил?! Тем способом, о котором я говорил?! Ладно, чувствуя наезд на того, кто задал вопрос - для вас его решение, если не знаете как он решается...
про LIMIT читать не пробовал? SQL = Stuctured Query Language (Структурированый Язык Запросов) — он изначально, потенциально, и логически предназначен, и что гораздо более важно, ОПТИМИЗИРОВАН, для выборки данных отвечающих определенным условиям из реляционной БД, на основании указания ограничений, приложимых к реляциям полей. И все. Использовать его для расчетов — не нужно. Гораздо лучше использовать голову, и спланировать БД так, что бы выборка была максимально простой, а значит — максимально быстрой.
я вижу только, что ты спрашивал об одном, а на самом деле тебе нужно было другое. А в самом первом запросе проблема была в том, что SUM — зарезервированное слово. А в остальном — ты решаешь проблему удалением гланд через ж..у. Спланировать базу надо правильно, вот и все. Прочитай определение SQL еще раз. И осмысли. Не поможет, прочитай теорию реляционных БД.
о чём об одном?.. я спрашивал как вывести все строки, при который значения (count( DISTINCT id_us ) *1000 + sum( all_click ) *100) меньше определённого числа. И не стоит писать мне про свои определения! Ничего мудрёного тут нет! Не знаешь как это делается - так и скажи. Вижу ты владеешь только основами и определениями...