NewGuy, първо да видим дали съм разбрал правилно. Имаш следните записи:
и като краен резултат искаш да изкараш 1?
А ако беше
пак ли искаш резултата да е само 1? Или този път вече ще искаш и 1 и 2?
Кодът, който аз ще ти дам изкарва само 1 и при двата случая.
SELECT колони FROM (SELECT * FROM таблица ORDER BY id DESC LIMIT 10) AS result GROUP BY колона_с_точките HAVING COUNT(колона_с_точките) > 1
колони - тук изреждаш всички колони, които искаш да изкарваш като резултат (примерно id, самото число и каквото друго имаш в таблицата)
таблица - името на таблицата, от която взимаш
резултатите
id - id колоната на таблицата, за да може да подредиш най-старите записи, най-отгоре
колона_с_точките - колоната, в която записваш тия 0, 1, 2, 3 и искаш да провериш дали се повтаря
И сега малко повече за заявката. Ще започна в реда, в който стават нещата.
Първо погледни удебелената заявка. Тя ти е необходима, защото искаш да взимаш последните 10 записа и в тях да търсиш. Т.е ако имаш както е втория пример, който ти дадох повтарящо се в 11-я запис, то да не се показва.
По нея няма какво толкова да се обяснява. Тя взима всички колони от оригиналната таблица, подрежда ги в обратен ред на ID (т.е последните да са първи) и ги ограничава до 10 записа (понеже искаш да гледаш последните 10 и този 11-и да не се включва в броенето).
След като направиш тази заявка на таблицата и се дава имe result, защото mysql иначе хвърля грешка.
След което заявката ти вече започва да изглежда така:
SELECT колони FROM result GROUP BY колона_с_точките HAVING COUNT(колона_с_точките) > 1
В тази заявка в SELECT клаузата оказваш колоните, които искаш да изкараш (или не препоръчително - *)
FROM клаузата вече е новата таблица от горната заявка.
И тук вече идва същинската част. GROUP BY групира еднаквите числа в колоната, която му зададеш (в твоя случай колоната с точки), а HAVING просто ограничава записите до тези, които имат повече от 1 повторения (т.е са повтарящи се)
И сега един пример с примерна таблица с две полета:
CREATE table test (
id int auto_increment primary key,
points int
)
и в нея имаш следните записи:
test
id|points
1|2
2|2
3|3
4|4
5|5
6|6
7|7
8|8
9|1
10|9
11|1
както виждаш последните 10 записа са ти от 2 до 11. Т.е двойката в първия запис няма да играе никаква роля.
И сега първата заявка ще ти изглежда така:
(SELECT * FROM test ORDER BY id DESC LIMIT 10) AS result
и тя ще изкара като резултат следната таблица
result
id|points
11|1
10|9
9|1
8|8
7|7
6|6
5|5
4|4
3|3
2|2
И сега втората заявка вече изглежда така:
SELECT points FROM result GROUP BY points HAVING COUNT(points) > 1
и като резултат ще получиш:
1, ако искаш и id номера да изкарваш трябва да ти стане SELECT id, points или SELECT *
Ами това е, по-добре не мога да го обясня.
П.С. Ако не искаш последните 10 резултата, а всички - тогава начина на Karcho ти върши идеална работа (то е г/д същото като моето, само дето търси за всички записи повтарящите се)