Я пытаюсь вернуть список разгруппированных значений, имеющих максимально определенное количество повторяющихся значений. У меня есть список значений, полученных как таковые:
select TagDirID from tags where id = '550'
Результаты будут:
9508
10382
10672
65454
65454
65454
65454
Как вы можете видеть, есть 4 повторения 65454. Я хотел бы вернуть список, в котором пользователь определил максимальное количество повторов для TagDirID. Например, выбирая только 3 повторения или меньше:
9508
10382
10672
65454
65454
65454
Все методы, которые я нашел, возвращают сгруппированный список, я хотел бы сохранить отдельные элементы. Это то, что можно сделать в запросе? Существует первичный ключ, TagID.
edit: для этого нужно выбрать все теги для элемента, id = '550'. потому что это пользовательский контент, иногда люди отмечают одно и то же несколько раз, и я пытаюсь сократить дубликаты, которые я показываю.
edit 2: так, хотя принятый ответ работал для меня, я обнаружил, что он был слишком медленным для того, что мне было нужно, поэтому я нашел решение php:
function get_tags($ID = '', $tags_to_keep = 3)
{
// Select all tags.
$query = "select TagDirID, Tag from tags where id = '$ID'";
$tags_result = mysql_query($query);
$num_results = mysql_num_rows($tags_result);
for ($i=0; $i<$num_results; $i++)
{
//Get tag topics
$tags_row = mysql_fetch_array($tags_result);
//build array of items already found with counts
$tags_count = array_count_values($tags_filter);
//if number of tags already found($tags_count/$tags_filter) is less than or equal to tags_to_keep then add to filtered array and return array.
if($tags_count[$tags_row['TagDirID']] <= $tags_to_keep)
{
$tags_filter[$i] = $tags_row['TagDirID'];
$tags[$i] = $tags_row['Tag'];
}
}
return $tags;
}