Проблема с группировкой и сортировкой

  • Автор темы Автор темы bestov
  • Дата начала Дата начала

bestov

Новичок
Проблема с группировкой и сортировкой

Ребята есть такой запрос:

PHP:
SELECT *, mi_dali_s - (oni_dali_s / 100 * coi) as count_users  
FROM obmen_new, obmen_category, obmen_site 
WHERE obmen_new.category = obmen_category.id and obmen_new.pokazivat = '1' and obmen_new.admin_proveril = '1' and obmen_site.rabotaet = '1'and obmen_new.site_id = obmen_site.id  
GROUP BY obmen_site.id  
ORDER BY count_users, obmen_new.rating DESC

Значит суть запроса такова. Считываются таблицы с новостями с сайтами и категориями. Нужно что бы новости от группировало по
id сайта и изначально отсортировало по этой формуле mi_dali_s - (oni_dali_s / 100 * coi), а потом уже по рейтингу у каждой новости.

Проблема запроса заключается в том, что после группировки сортируется по формуле, но вот уже по рейтингу новостей нет. Если убираю группировку все правильно но вот только показывает все новости сайтов, а мне нужно что бы показывалась по одной новости с каждого сайта. По этому я группирую.

Как можно обойти это?
Я как пробовал не получается :(
Помогите пожалуйста.
 
ты хочешь управлять, какая единственная из группируемых (т.е. исчезающих из результата) строк попадет в результат по "*" ? Тема обмусолена, см поиск или доку мыскла, там пример есть.
 
я посмотрел, точнее всю ночь форум читаю, но похожего не нашел :(
но не совсем понял вопроса можно как нить конкретнее? :)
 
почитал спасибо но так тоже не работает.
есть какие нить еще идеи?
 
ну тогда объясни чего ты хочешь. Попробуй на примере:
"хочу вот так: (несколько записей с имеющими значение столбцами), а получается вот так: (то же самое)"
 
Давай попробую объяснить для начала а потом если что кину все :)

Смотри ты когда нить пробовал группировать и сортировать по 2 критериям?
Смотри группировка идет по id сайтов, потом идет сортировка сайтов по схеме count_users (тут мы получаем сайты которым система должна больше всего посетителей), потом через запятую пытаюсь уже отсортировать сами новости по рейтингу, что бы показывал самые кликабельные новости. Но вот это уже не получается... Он берет новость по его желанию :(
 
т.е. все-таки
ты хочешь управлять, какая единственная из группируемых (т.е. исчезающих из результата) строк попадет в результат по "*" ?
? и
In some cases, you can use MIN() and MAX() to obtain a specific column value even if it isn't unique. The following gives the value of column from the row containing the smallest value in the sort column:
SUBSTR(MIN(CONCAT(RPAD(sort,6,' '),column)),7)
тебе не помогло?
 
вот сейчас пробую SUBSTR(MIN(CONCAT(RPAD(sort,6,' '),column)),7)
и че то не пойму как правильно это ввести, ошибку чу то все время выдает :(
 
так запрос же есть сверху в самом первом сообщении. Тебе его не видно?
 
и че то не пойму как правильно это ввести, ошибку чу то все время выдает
запрос, который ошибку выдает или как ты пытаешься присобачить SUBSTR(...) к своему запросу
 
вот просто вписываю эту строку
$test = SUBSTR(MIN(CONCAT(RPAD(sort,6,' '),column)),7);
а она сама ошибку выдает вот такую

Fatal error: Call to undefined function CONCAT() in Z:\home\obmen.ru\www\go_news.php on line 195
 
1) это на sql
2) это не запрос, а часть (выражение)
3) чтобы им воспользоваться, надо понять как оно работает
 
вот тестирую и пытаюсь понять и не как не получается :(
я по английский не очень хорошо понимаю, наверное по этому не пойму как это делать, а на той странице как назло и примеров нету :(

-~{}~ 15.03.09 08:42:

SELECT *, SUBSTR(MIN(CONCAT(RPAD(sort,6,'obmen_site.id'),column)),7)

я вот так пробую, вообще правильно?
 
то выражение возвращает значение столбца column из записи с минимальным значением столбца sort (причем значение столбца sort не может превысить 6 символов)
пробуешь неправильно
 
PHP:
SELECT *, SUBSTR(MIN(CONCAT(RPAD(obmen_new.rating,6,' '),obmen_site.id)),7), mi_dali_s - (oni_dali_s / 100 * coi) as count_users 
FROM obmen_new, obmen_category, obmen_site 
WHERE obmen_new.category = obmen_category.id and obmen_new.pokazivat = '1' 
and obmen_new.admin_proveril = '1' 
and obmen_site.rabotaet = '1'and obmen_new.site_id = obmen_site.id 
GROUP BY obmen_site.id 
ORDER BY count_users, obmen_new.rating DESC

вот полный запрос который у меня получился, но он опять же не вытягивает самые кликабельные новости :(
 
ты метод хорошо понял? теперь ищи свои баги
 
ну вроде понял, разве я там что то не так сделал?
просто наверное нужно помчаться что бы выводило так как мне нужно :(
 
Сверху