Подскажите пожалуйста как сделать чтобы в запросе выводился список людей, каждый должен выводится только 1 раз со своим максимальным результатом: Код (Text): $query = mysql_query("SELECT `jos_comprofiler`.`user_id`, `jos_comprofiler`.`firstname`, `jos_comprofiler`.`middlename`, `jos_comprofiler`.`lastname`, `jos_comprofiler`.`cb_group`, `resulttest`.`result`, `resulttest`.`lastvisit`, `resulttest`.`user_id` FROM `jos_comprofiler` JOIN `resulttest` ON `resulttest`.`user_id`=`jos_comprofiler`.`user_id` WHERE `jos_comprofiler`.`cb_group` = '$group1' GROUP BY `resulttest`.`user_id` ORDER BY `lastname` asc, `result` desc") or die (mysql_error()); Так все выводит, но он берет id которое встречается первое, а остальные пропускает, а у первого не всегда максимальный результат. На сколько я знаю в WHERE нельзя использовать агрегатные функции, как MAX(`result`), по крайней мере у меня не получилось Может как то сделать сначала запрос выбрать упорядочив по имени, результату, а потом уже тот запрос сгруппировать. Но как можно сгруппировать результат первого запроса?
Re: Выборка из БД, вывод максимального значения при группиро , причем тут вообще WHERE и MAX вы читали вообще, что это? Может быть Вам HAVING нужен? Вообще то: "SELECT MAX(id) WHERE ............" $m['MAX(id)'] "SELECT MAX(id) as max_id WHERE ............" $m['max_id']
Re: Выборка из БД, вывод максимального значения при группиро Your прав - для такого запроса Вам необходимо написать примерно так: Код (Text): ... GROUP BY jos_comprofiler.user_id HAVING resulttest.result = max(resulttest.result) п.с. стоит учесть, что подобные запросы крайне неэффективные
Re: Выборка из БД, вывод максимального значения при группиро Я пробовала так писать, но тогда запрос просто не выводит данные. Поскольку он сначала группирует всех встреченных первых по id, и только потом из них выбирает, если выбранный id был с max значением то выводит, если не с max значением то не выводит. А мне нужно чтобы выводил каждого пользователя с его максимальным значением результата. Добавлено спустя 1 минуту 36 секунд: Re: Выборка из БД, вывод максимального значения при группировке Когда я пробовала так делать поля с результатом выводит мне пустые, как будто там ничего нет, незнаю почему)
Re: Выборка из БД, вывод максимального значения при группиро Да там и ненужно, подскажите как один запрос в другой вставить? Сначала просто сделать упорядочивание по результатам, чтобы вверху были максимальные, а затем в этом упорядоченном просто сделать GROUP BY, тогда он выберет те id что первые встретит и они будут с максимальным результатом. Я просто незнаю как сделать группировку по уже сделанному запросу
Re: Выборка из БД, вывод максимального значения при группиро когда делаете GROUP BY, во фразе SELECT можно ставить ту колонку(и) по которой делаете группировку + агрегатные функции от других колонок например Код (Text): SELECT user_id, max(lastvisit) FROM jos_comprofiler GROUP BY user_id это правильное выражение, а такое Код (Text): SELECT user_id, lastvisit FROM jos_comprofiler GROUP BY user_id НЕправильное: MySql допускает такой синтаксис (oracle выдал бы ошибку), но результат неопределен. фиг знает что в этом случае должен значить lastvisit суть понятна? когда добавляете JOIN ничего не меняется — все также можно только группируемые колонки и агрегаты от других Добавлено спустя 8 минут 36 секунд: Re: Выборка из БД, вывод максимального значения при группировке понятно ваше желание засунуть туда firstname, lastname и т.п. говно. нельзя так делать. получите чистые user_id и расчетные цифры max() или sum()... уже результат этой правильной выборки вы можете "заджойнить" опять с таблицей jos_comprofiler по user_id чтобы получить имена. сначала селект-с-группировкой в подзапросе, затем джойн
Re: Выборка из БД, вывод максимального значения при группиро Хорошо, но как же тогда остальные столбцы которые мне надо выбрать из таблиц? Ну и я поняла что у mysql в таком случае значит вторая колонка) Просто то что было встреченно с первым id которое он и выбрал, а остальные он просто пропустил в процессе выборки.
Re: Выборка из БД, вывод максимального значения при группиро просто пока писала, не обновляла. Спасибо, теперь понятно как эти запросы объединить. Просто я думала Join объединяет имеющиеся таблицы, а не запросы. Можно использовать select... join и потом снова select ? Немогу найти где можно почитать про такой синтаксис
У меня почему то вообще не работает MAX(result), запрос выполняется, но поля result пустые, если не брать функцию max, то все result выводит. Код (PHP): $query = mysql_query("SELECT `user_id`, max(result) FROM `resulttest` GROUP BY `user_id`"); Поля result в таблице типа int(11), в чем может быть ошибка?
Re: Выборка из БД, вывод максимального значения при группиро нет, это ничего не меняет. А вот как если без max, но это неправильный результат
Re: Выборка из БД, вывод максимального значения при группиро видимо вы чего-то недоговариваете. или запрос не такой (result из другой таблицы???) или обработка результатов косячная. не может max() быть пустым, если есть хоть одно непустое значение
Вот как выглядит структура таблицы Единственное что данные в неё попадают из Код (PHP): $result = $_POST['result']; а вот тут они вроде как строковые Код (PHP): $query3 = mysql_query("INSERT INTO `resulttest` SET `user_id`='{$user_id}', `lastname`='{$lastname}', `group`='{$group}', `result`='{$result}', `lastvisit`='{$lastvisit}'") or die (mysql_error()); Но мне казалось, что попадая в таблицу где поле int они преобразуются под поле.
Re: Выборка из БД, вывод максимального значения при группиро в двойных кавычках переменные можно не брать в фигурные скобки. массивы - обязательно. а че не пашет - я хз. у вас инъекция и базу можно убить засунув в result какойнить злой запрос.
Код (PHP): $query = mysql_query("SELECT user_id as uid,MAX(result) as max FROM resulttest"); while($q=mysql_fetch_assoc($query)) { echo $q['uid'].' -> '.$q['max'].'<br />'; } проверьте, а у вас вообще вот так работает?!
Re: Выборка из БД, вывод максимального значения при группиро Да, так работает, правда не совсем правильно, он вывел только одного пользователя, хотя там их 4 и у каждого есть какой то свой максимальный результат. Добавлено спустя 1 минуту 52 секунды: Re: Выборка из БД, вывод максимального значения при группировке Незнаю что это) я всего 2 месяца этим занимаюсь потому что надо электронный учебник для кафедры сделать с тестом. Результаты формируются внутри цикла автоматически и затем заносятся в базу после сохранения. Я сомневаюсь что кому то будет смысл ронять базу) Добавлено спустя 13 минут 12 секунд: Re: Выборка из БД, вывод максимального значения при группировке Кстати если этот запрос сделать чтоб работал правильно, это и будет то что мне нужно, без всяких группировок и объединений. Я делаю страницу рейтинга. Мне надо чтобы запрос вывел каждого пользователя с его максимальным результатом, а потом просто упорядочить
Re: Выборка из БД, вывод максимального значения при группиро ну в любом случае если текст будет с кавычками, то может просто даже не записаться корректно. так что имеет смысл воткнуть защиту.
Re: Выборка из БД, вывод максимального значения при группиро SiUna, у вас есть phpmyadmin, прогоните запрос max() gropup by в нем, увидите, что данные ЕСТЬ. просто в скрипте вы накосячили с именами полей
Уже вроде итак понятно в чем проблема, когда делаешь group by, там 4 пользователя и он их вывел, но вот Max результат он показывает только одного, и просто незнает куда ставить значение вот и не выводит. Вот этот запрос нужный, можно обойтись без group by, но почему то он выводит только одного пользователя с максимальным значением, а нужно чтоб каждого.
Re: Выборка из БД, вывод максимального значения при группиро ну смех и грех. "вроде понятно" „- Человек сидит у обрыва, - сказал он, - и рядом с ним сандалии. Неизбежно возникает вопрос: чьи это сандалии и где их владелец?“ добавь group by userid
Re: Выборка из БД, вывод максимального значения при группиро Чем это поможет)Там итак 1 пользователь всего, там даже нечего группировать. Я его делала только для того чтобы он не выводил мне всех больше 1 раза, но раз можно вывести каждого с его максимальным результатом, то мне ненужен group by. Только вот в том запросе не получается вывести каждого почему то, выводит только одного, того у кого максимальный результат.
Сможет кто объяснить, почему этот запрос не выводит каждого пользователя? Код (PHP): $query = mysql_query("SELECT user_id as uid,MAX(result) as max FROM resulttest"); while($q=mysql_fetch_assoc($query)) { echo $q['uid'].' -> '.$q['max'].'<br />'; }
Re: Выборка из БД, вывод максимального значения при группиро Функция MAX находит одно наибольшее значение столбца result. После такого запроса можно не делать далее while, т.к. возвратится 0 или 1 запись.