2013-02-26 1 views
1

Я искал, но не смог найти решение, которое может быть успешно адаптировано к моему запросу.MySQL, как найти и сравнить значения min и max в одной строке

Я создал базу данных, содержащую рекламные баннеры, и мой скрипт вращается и отображает каждый каждый баннер подряд, однако я пытаюсь добавить запрос, который будет искать в таблице и отображать баннер с самым высоким CTR (щелчок (количество раз, когда был показан баннер) и MAX-клики (количество раз, когда был нажат баннер)

Я пробовал много разных комбинаций поискового запроса, некоторые из них синтаксис неверен, а другие, похоже, имеют правильный синтаксис, но не дают ожидаемых результатов, это последний запрос, который я пробовал:

$query = "SELECT banner_id,banner_url,banner_alt,banner_size FROM banner_ads WHERE $banner_niche$banner_size banner_enable=1 AND banner_impressions=(SELECT MIN(banner_impressions) FROM banner_ads WHERE banner_clicks=(SELECT MAX(banner_clicks) FROM banner_ads));"; 
$result = mysql_query($query) or die('Query failed: ' . mysql_error() . "\nQuery: $query"); 
$row = mysql_fetch_array($result, MYSQL_NUM); 
$banner_id = $row[0]; 
$banner_url = $row[1]; 
$banner_alt = $row[2]; 
list($banner_width, $banner_height) = split("x", $row[3]); 

Примером содержимого поля являются:

banner_id/banners row ID number : 1 
banner_url/URL to the banner image : http://somesite.com/banner.jpg 
banner_alt/banner alt text : Visit SomeSite.com 
banner_size/size of the banner : 468x60 
banner_niche/the category of the banner : books 
banner_enable/is the banner set to display or not : 1 
banner_impressions/number of times banner has been shown : 1000 
banner_clicks/number if time banner has been clicked : 50 

Так просто мне нужно запросить, чтобы найти таблицу для баннера, который имеет наименьшее количество показов с наибольшим количеством кликов.

---------------------------------------------- 
banner_id | banner_impressions | banner_clicks 
---------------------------------------------- 
1   | 1000    | 50 
2   | 100    | 80 
3   | 2000    | 90 
---------------------------------------------- 

Таким образом, в приведенном выше примере banner_id 2 будет соответствовать критериям. (Я пропустил другие поля в примере, потому что они не актуальны)

Спасибо заранее, я надеюсь, что я достаточно хорошо объяснил, чего я пытаюсь достичь.

+0

Что делать, если что-то имеет 50 показов и 100 кликов. а другой - 55 показов и 150 кликов. Что бы вы выбрали? – Scotch

+0

Без этого становится еще сложнее, чем это уже было тогда 50/100 – user2109722

ответ

0

Чтобы получить высокий коэффициент кликов на рекламные баннеры, этот запрос будет работать

select banner_id, banner_impressions, banner_clicks, rank() over 
    (order by click_toimpression DESC) 
    as ranks FROM 
     (
select banner_id, banner_impressions, banner_clicks, 
    (banner_clicks/banner impressions) 
    as Click_ToImpression FROM banner_ads 
    ); 

--Для самого высокого ранга

Select * FROM 
    (
    select banner_id, banner_impressions, banner_clicks, rank() over 
    (order by click_toimpression DESC) 
    as ranks FROM 
     (
select banner_id, banner_impressions, banner_clicks, 
    (banner_clicks/banner impressions) 
    as Click_ToImpression FROM banner_ads 
    )) WHERE ranks = 1 

;

MySQL 

    select banner_id, banner_impressions, banner_clicks, 
    (banner_clicks/banner impressions) 
    as Click_ToImpression FROM banner_ads) ORDER BY Click_toImpression DESC 
    LIMIT 1; 

Это будет ранг ваших отношений. Чтобы получить максимум, просто выберите max из этого, если вы просто хотите одну строку.

Это оценивает их по коэффициенту объявления баннера, а не произвольно получает min и max и пытается собрать информацию из этого. I думаю, это в соответствии с тем, что вы ищете, и как я подхожу к этой проблеме.

+0

Спасибо, что посмотрели на это ... Я пробовал выше, но это заставило синтаксическую ошибку, я тогда заметил, что в баннере отсутствует символ подчеркивания поэтому я добавил его в том, что решил ошибку синтаксиса, но, увы, не дал никаких результатов ... Если я не пытаюсь «выбрать максимум из этого *, используя неправильную технику. – user2109722

+0

Хм, это должно сработать. решение для выбора самой высокой строки отношения – Scotch

+0

Я просто попробовал версию с самым высоким рейтингом и все еще получаю синтаксическую ошибку, снова попробовал переформатировать ее немного, но все еще синтаксическую ошибку, я даже сделал небольшой тестовый файл, который просто подключается к БД и запускает этот запрос один ... Один плюс - вы точно знаете, чего я пытаюсь достичь, хотя ... спасибо – user2109722

Смежные вопросы