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

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), а потом уже по рейтингу у каждой новости.

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

Как можно обойти это?
Я как пробовал не получается :(
Помогите пожалуйста.
 

DiMA

php.spb.ru
Команда форума
ты хочешь управлять, какая единственная из группируемых (т.е. исчезающих из результата) строк попадет в результат по "*" ? Тема обмусолена, см поиск или доку мыскла, там пример есть.
 

bestov

Новичок
я посмотрел, точнее всю ночь форум читаю, но похожего не нашел :(
но не совсем понял вопроса можно как нить конкретнее? :)
 

bestov

Новичок
почитал спасибо но так тоже не работает.
есть какие нить еще идеи?
 

x-yuri

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

bestov

Новичок
Давай попробую объяснить для начала а потом если что кину все :)

Смотри ты когда нить пробовал группировать и сортировать по 2 критериям?
Смотри группировка идет по id сайтов, потом идет сортировка сайтов по схеме count_users (тут мы получаем сайты которым система должна больше всего посетителей), потом через запятую пытаюсь уже отсортировать сами новости по рейтингу, что бы показывал самые кликабельные новости. Но вот это уже не получается... Он берет новость по его желанию :(
 

x-yuri

Новичок
т.е. все-таки
ты хочешь управлять, какая единственная из группируемых (т.е. исчезающих из результата) строк попадет в результат по "*" ?
? и
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)
тебе не помогло?
 

bestov

Новичок
вот сейчас пробую SUBSTR(MIN(CONCAT(RPAD(sort,6,' '),column)),7)
и че то не пойму как правильно это ввести, ошибку чу то все время выдает :(
 

bestov

Новичок
так запрос же есть сверху в самом первом сообщении. Тебе его не видно?
 

x-yuri

Новичок
и че то не пойму как правильно это ввести, ошибку чу то все время выдает
запрос, который ошибку выдает или как ты пытаешься присобачить SUBSTR(...) к своему запросу
 

bestov

Новичок
вот просто вписываю эту строку
$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
 

x-yuri

Новичок
1) это на sql
2) это не запрос, а часть (выражение)
3) чтобы им воспользоваться, надо понять как оно работает
 

bestov

Новичок
вот тестирую и пытаюсь понять и не как не получается :(
я по английский не очень хорошо понимаю, наверное по этому не пойму как это делать, а на той странице как назло и примеров нету :(

-~{}~ 15.03.09 08:42:

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

я вот так пробую, вообще правильно?
 

x-yuri

Новичок
то выражение возвращает значение столбца column из записи с минимальным значением столбца sort (причем значение столбца sort не может превысить 6 символов)
пробуешь неправильно
 

bestov

Новичок
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
вот полный запрос который у меня получился, но он опять же не вытягивает самые кликабельные новости :(
 

DiMA

php.spb.ru
Команда форума
ты метод хорошо понял? теперь ищи свои баги
 

bestov

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