Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите составить запрос

1.8K
24 июня 2010 года
trivium
128 / / 31.01.2010
Всем привет!
Есть БД следующей структуры
таблица count, в ней хранятся клики по товарам:
id, bill_id (integer), date (date)
и есть таблица bills:
bill_id, vendorId
И вот надо выбрать из таблицы bills все записи (уникальные) у которых наибольшее количество кликов в таблице count и отсортировать их... При чём выбрать те клики у которых дата не больше чем 14 дней от текущей даты... Как должен выглядеть такой запрос по правилам? Я уже пару дней не могу его правильно составить.
Заранее спасибо.
1.8K
24 июня 2010 года
trivium
128 / / 31.01.2010
вот запрос:
 
Код:
SELECT `bills`.`id` , count( `count`.id ) AS `clickscount`
FROM `count`
JOIN `bills` ON bills.bill_id = count.bill_id
WHERE count.date >= date_add( curdate( ) , INTERVAL -14
DAY )
GROUP BY bills.id
ORDER BY clickscount DESC
LIMIT 0 , 50

но он как-то коряво отрабатывает...
берёт старые записи, а не за 2 недели...
и вообще какой-то левак пихает и вместо 50 выдаёт 74:(
385
24 июня 2010 года
SomewherSomehow
477 / / 25.07.2004
Из условия не совсем понятно, "наибольшее количество кликов в таблице count" - именно Наибольшее? Т.е. максимальное среди всех, тогда это вполне может быть только одна запись ( а несколько только если найдуться совпадающие по максимуму - или именно это нужно?)..непонятно почему речь идет о нескольких... Или наибольшее по сравнению с другими bills?.. Вы приведите лучше тестовые данные и что должно получиться в итоге, чтоб было яснее..
279
24 июня 2010 года
bave
456 / / 07.03.2004
 
Код:
GROUP BY bills.id
ORDER BY clickscount DESC


это какая-то паль :) - странно, что вообще работает...


Цитата:
Из условия не совсем понятно, "наибольшее количество кликов в таблице count" - именно Наибольшее?...



Если я правильно понял, то нужно отсортировать по убыванию для всех bills...

Тогда запрос будет выглядеть так (на t-sql):

Код:
select top 50
    all_bills.bill_id
    , all_bills.vendorId
    , counts.ClickCount
from
    (select
          click_count.bill_id BillId
          , count(click_count.id) ClikCount
     from
          [count] click_count
     where
          ...  -- тут ваше условие, проверки даты...
     group by
          click_count.bill_id) counts
         inner join bills all_bills
             on all_bills.bill_id = counts.BillId
order by
     counts.ClickCount desc


вот как-то так - быстренько набросал, может где-то ошибся...

Кстате, если по какому либо из bill-ов кликов небыло вообще, то в результате
запроса записи о нем не будет - запрос можно легко поменять, чтобы
запись по этому bill-у была в результате, со значением кликов 0 - это уж
вам видней как корректней...
1.8K
25 июня 2010 года
trivium
128 / / 31.01.2010
Цитата: bave
 
Код:
GROUP BY bills.id
ORDER BY clickscount DESC


это какая-то паль :) - странно, что вообще работает...



Почему паль?
Сгруппировать по id, чтобы MySQL знал кто там главный)
И отсортировать по кол-ву кликов...
В общем ладно, я уже решил проблему, спасибо)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог