Возвращение количества записей и игнорирование дубликатов в MySQL / PHP - PullRequest
2 голосов
/ 01 февраля 2012

У меня есть таблица mySQL с записями пользователей, которые посетили мой сайт.Я хочу выяснить, сколько записей в моей таблице, но подсчитать повторяющиеся значения только один раз, чтобы узнать, сколько уникальных посетителей.

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

$pageViews = mysql_query("SELECT * FROM JB_Statistics WHERE month='$month' ");
$numRowsPV = mysql_num_rows($pageViews) ;

while ($row = mysql_fetch_assoc($pageViews)) {
    $month = $row['month'];
}

echo "<p>Month: $month, Total Hits: $numRowsPV </p>";

Таблица JB_Statistics также имеет IP-адрес и поле браузера с уникальной информацией для каждого попадания , так что есть ли способиспользования этого кода, чтобы изменить приведенный выше код и найти уникальных посетителей в месяц ?

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

Ответы [ 5 ]

4 голосов
/ 01 февраля 2012
SELECT COUNT(*)                             AS DistinctClicks
     , COUNT(DISTINCT IpAddress)            AS DistinctIpAddresses
     , COUNT(DISTINCT Browser)              AS DistinctBrowsers
     , COUNT(DISTINCT IpAddress, Browser)   AS DistinctUsers      --- hopefully
FROM JB_Statistics
WHERE month='$month'
2 голосов
/ 01 февраля 2012

Не точно на основе вашего описания.

Приведенные выше ответы верны с точки зрения SQL, вы можете использовать предложение GROUP BY или DISTINCT , но IP-адрес не дает уникальных посетителей. За одним IP-адресом может находиться любое количество пользователей.

Возможно, вам придется переосмыслить то, что вы используете, чтобы определить уникальность каждой записи.

0 голосов
/ 01 февраля 2012

использовать GROUP BY: SELECT COUNT(*) FROM JB_Statistics WHERE month='$month' GROUP BY ip_address

0 голосов
/ 01 февраля 2012

Измените ваш запрос следующим образом:

SELECT COUNT(DISTINCT ipfield) FROM JB_Statistics WHERE month='$month'"

Это должно дать то, что вы хотите.

0 голосов
/ 01 февраля 2012

Вы можете использовать:

$pageViews = mysql_query( "SELECT COUNT(DISTINCT uniquefield) FROM JB_Statistics WHERE month='$month'" );
$row = mysql_fetch_array( $pageViews );
echo "<p>Month: $month, Total Hits: ", $row[0], "</p>";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...