Подсчет повторяющихся записей и сортировка их по категориям - PullRequest
0 голосов
/ 15 декабря 2011

Просто нужна помощь, чтобы узнать, как использовать оператор SQL, который проверяет наличие дублирующихся записей в столбце интереса, а затем сортирует их по идентификатору категории, которому они назначены.

Идеальным результатом будетecho like;

"Рыбалка" - самый популярный интерес в категории "4"

Изо всех сил пытаюсь узнать, с чего начать: S

Обновление - у меня есть это сейчас, спасибок вашей помощи, однако, я считаю, что мой синтаксис неправильный?

$interestCatPopular = "SELECT interest_desc, categoryID, MAX(num_in_cat) AS num_in_cat    FROM
(
SELECT 
interest_desc,
categoryID,
COUNT(categoryID) AS num_in_cat
FROM tbl
GROUP BY interest_desc, categoryID
) subsel 
GROUP BY interest_desc, categoryID";

$mostPopularInterest = mysql_query($interestCatPopular) or die(mysql_error());

$arrayResults = mysql_fetch_assoc($mostPopularInterest);
foreach ($arrayResults as $result) {
echo "{$result['interest_desc']} was the most popular in category   {$result['categoryID']} with {$result['num_in_cat']} occurrences\n";
}

:)

Ответы [ 2 ]

0 голосов
/ 15 декабря 2011
SELECT a.* 
FROM 
(
   SELECT category, interest_desc, COUNT(*) as num
   FROM category_table
   GROUP BY category,interest_desc
)a
INNER JOIN 
(
 SELECT category, MAX(num) AS max_num 
 FROM 
 (
   SELECT category, interest_desc, COUNT(*) as num
   FROM category_table
   GROUP BY category,interest_desc
 )b
 GROUP BY b.category
)c ON c.category = a.category AND a.num = c.max_num
0 голосов
/ 15 декабря 2011

Используя подзапрос, вы можете сначала посчитать число в каждой категории. Исходя из этого, внешний запрос выбирает максимальное количество вместе с соответствующими categoryID и interest_desc.

Этот запрос должен приводить к самым популярным interest_desc для каждого categoryID, а также к количеству вхождений. Конечно, это не проверено.

SELECT interest_desc, categoryID, MAX(num_in_cat) AS num_in_cat FROM
(
SELECT 
  interest_desc,
  categoryID,
  COUNT(categoryID) AS num_in_cat
FROM tbl
GROUP BY interest_desc, categoryID
) subsel 
GROUP BY interest_desc, categoryID

В PHP после успешного запроса и циклического вызова mysql_fetch_assoc() в массив $results:

Обновление

Вам нужно получить результаты в цикле:

// Load $arrayResults in a loop...
$arrayResults = array();
while ($row = mysql_fetch_assoc($mostPopularInterest)) {
  $arrayResults[] = $row;
}

foreach ($arrayResults as $result) {
  echo "{$result['interest_desc']} was the most popular in category   {$result['categoryID']} with {$result['num_in_cat']} occurrences\n";
}
...