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
Помогите составить запрос
Есть БД следующей структуры
таблица count, в ней хранятся клики по товарам:
id, bill_id (integer), date (date)
и есть таблица bills:
bill_id, vendorId
И вот надо выбрать из таблицы bills все записи (уникальные) у которых наибольшее количество кликов в таблице count и отсортировать их... При чём выбрать те клики у которых дата не больше чем 14 дней от текущей даты... Как должен выглядеть такой запрос по правилам? Я уже пару дней не могу его правильно составить.
Заранее спасибо.
Код:
но он как-то коряво отрабатывает...
берёт старые записи, а не за 2 недели...
и вообще какой-то левак пихает и вместо 50 выдаёт 74:(
Из условия не совсем понятно, "наибольшее количество кликов в таблице count" - именно Наибольшее? Т.е. максимальное среди всех, тогда это вполне может быть только одна запись ( а несколько только если найдуться совпадающие по максимуму - или именно это нужно?)..непонятно почему речь идет о нескольких... Или наибольшее по сравнению с другими bills?.. Вы приведите лучше тестовые данные и что должно получиться в итоге, чтоб было яснее..
Код:
GROUP BY bills.id
ORDER BY clickscount DESC
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
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 - это уж
вам видней как корректней...
Цитата: bave
Код:
GROUP BY bills.id
ORDER BY clickscount DESC
ORDER BY clickscount DESC
это какая-то паль :) - странно, что вообще работает...
Почему паль?
Сгруппировать по id, чтобы MySQL знал кто там главный)
И отсортировать по кол-ву кликов...
В общем ладно, я уже решил проблему, спасибо)