Групировка отдельных ненужных записей из запроса

programmer_2006

Новичок
Групировка отдельных ненужных записей из запроса

Есть таблица со статистикой и в ней поле откуда пришол(refferer) пользователь. Админу я вывожу статистику по кейвордам которые выдираю из реферела на основе запросов от поисковиков(гугл, яндекс, рамблер и т.д.), а все остальные кейворды я должен отнести(сгрупировать) в группу Other.
Вот примерно такой у меня запрос

PHP:
SELECT `s`.`refferer` AS `keywords`   
FROM `statistics` AS `s`   
WHERE (  LOCATE( '?', `refferer` ) !=0  ) 
GROUP BY `s`.`refferer`

В итоге к меня получается такая таблица для админа
[Other]
[Other]
...
[Other]
lalala + blabla

А должна быть всего одна зпись [Other] т.е. получается мне надо как то сгрупировать в таблице записи которые не удовлетворяют определенным условиям и не похожи.
Через ПХП такое делать не очень хочется, так как прийдется и в постраничную навигацию хак делать.
МОжно ли как то решить мою задачку средствами MySQL? МОжет я не правильно подошол к решению?
Заранее спасибо
 
select if(LOCATE( '?', `refferer` ) !=0, s.referer,"other") x from ...
group by x
 
Автор оригинала: DiMA
select if(LOCATE( '?', `refferer` ) !=0, s.referer,"other") x from ...
group by x
Хороший вариант спасибо. Ед. навряд подойдет т.к. строкой WHERE ( LOCATE( '?', `refferer` ) !=0 ) я извлекаю все рефереры которые могут быть от поисковиков т.е. отсеиваю те которые не содержат вообще параметров.
Потом в скрипте выполняю такую функию

PHP:
$params = explode('?',$referrer);
	    $keywords = '';
		$matches = array();
		if ( strpos( $referrer, 'google') !== FALSE || strpos( $referrer, 'msn') !== FALSE ) { 
		   if (preg_match('/q=([^&]+)/i', $referrer, $matches)) {
		   		$keywords = $matches[1];
		   		$keywords = str_replace(array( '+' ), ' ', $keywords );
		   }
		}elseif ( strpos( $referrer[0], 'yahoo') !== FALSE ) {	   
		   if (preg_match('/p=([^&]+)/i', $referrer, $matches)) {
		   		$keywords = $matches[1];
		   		$keywords = str_replace(array( '+' ), ' ', $keywords );
		   }
		}elseif ( strpos( $referrer[0], 'yandex') !== FALSE ) {	   
		   if (preg_match('/text=([^&]+)/i', $referrer, $matches)) {
		   		$keywords = $matches[1];
		   		$keywords = str_replace(array( '+' ), ' ', $keywords );
		   }
		}else {
			if (preg_match('/query=([^&]+)/i', $referrer, $matches)) {
		    	$keywords = $matches[1];
		    	$keywords = str_replace(array( '+' ), ' ', $keywords );
			}
			if (preg_match('/keyword=([^&]+)/i', $referrer, $matches)) {
				$keywords = $matches[1];
	    		$keywords = str_replace(array( '+' ), ' ', $keywords );
			}
		}
		
	    $keywords = empty( $keywords ) ? '[ Other ]' : $view->truncate( $keywords, 50, '...', true);

А в Вашем варианте у меня все строки, даже те которые мне нужны будут определятся как Other. Ед. можно усложнить запрос и попытатся перенести в него проверку по регулярным выражением, но как это хреново будет, можно создать процедуру, но тоже не хочется так как в проекте их нет... Может надо как то запрос по другому построить...
 
по-умному, статистика пишется так:
1. сброс данных с каждого скрипта в тхт файл
2. каждые 10 секунд кроном сбор данных из файла в базу и вычисление всех нужных для статистики данных (для твоей задачи вычисляем новое поле)
3. отчет просто выбирает данные, без сложных запросов (по новому полю)
 
Спасибо теперь буду знать как правильно делать статистику. Но времени сейчас переделывать не проект стартанул и клиент просит быстро пофиксит проблему.
 
Сверху