Как я могу получить отличные результаты последних десяти посетителей со счетом того, сколько раз они посетили?
Это:
SELECT DISTINCT all_ref FROM site_stats WHERE all_ref!='' ORDER BY id DESC LIMIT 10";
возвращает последние десять последнихпосетителей
all_ref
Chicago, IL
Chesapeake, VA
Austin, TX
San Jose, CA
Houston, TX
Newport News, VA
Sebastian, FL
Dublin, IE
Menlo Park, CA
Waves, NC
Это вернет счет всем посетителям:
SELECT all_ref, COUNT(*) AS ct FROM site_stats WHERE all_ref!=''
AND all_ref!=',' GROUP BY all_ref ORDER BY ct DESC, all_ref
Вот что я пытаюсь получить за последние 10 посетителей, сколько раз они посетили:
SELECT x.all_ref, x.ct
FROM (SELECT all_ref, COUNT(*) AS ct FROM site_stats WHERE all_ref!='' GROUP BY all_ref )
AS x LEFT JOIN site_stats AS f
ON f.all_ref=x.all_ref
ORDER BY f.id DESC LIMIT 10
Возвращает это (все значения all_ref и ct верны):
all_ref ct
Chicago, IL 26
Chicago, IL 26
Chesapeake, VA 18
Chesapeake, VA 18
Austin, TX 2
San Jose, CA 3
Houston, TX 1
Chicago, IL 26
Chicago, IL 26
Chicago, IL 26
, но должно возвращать что-то более похожее на это:
all_ref ct
Chicago, IL 26
Chesapeake, VA 18
Austin, TX 2
San Jose, CA 3
Houston, TX 1
Chicago, IL 26
Pittsburgh, PA 11
Richmond, VA 52
Waves, NC 24
Grandy, NC 9
Созданиеэто DISTINCT x.all_ref не является ответом.
ОБНОВЛЕНИЕ : решение, которое работает для меня:
SELECT x.all_ref, x.ct
FROM (SELECT all_ref, MAX(id) AS id, COUNT(*) AS ct
FROM site_stats
WHERE all_ref!='' GROUP BY all_ref )
AS x LEFT JOIN site_stats AS f
ON f.all_ref=x.all_ref
GROUP BY x.all_ref
ORDER BY x.id DESC LIMIT 10;