Как подсчитать уникальные строки в php pdo? - PullRequest
0 голосов
/ 09 декабря 2018

Вот мой обычный способ подсчета строк ...

$query = "SELECT * FROM users";
$stmt = $db->prepare($query);
$stmt->execute();
$count = $stmt->rowCount();

Это подсчитает все строки, даже если я использую предложение WHERE, оно все равно посчитает каждую строку, которая соответствует этому условию.Однако, скажем, у меня есть таблица, мы назовем ее tokensEarned (это мое реальное имя таблицы).У меня есть следующие данные ...

user_id = 1,2,4,5,8,8,2,4,3,7,6,2 (это фактические строки в моей таблице - ясно,1 пользователь имеет 1 запись, 2 имеет три записи и т. д.) Всего у меня 12 записей.Но я не хочу, чтобы мой запрос насчитывал 12. Я хочу, чтобы мой запрос подсчитывал каждый user_id один раз.В этом примере мой счет должен отображать 8.

Любая помощь по этому поводу?Я могу объяснить, если у вас есть какие-либо конкретные вопросы или разъяснения, которые вам нужны.Буду премного благодарен.Спасибо.

Ответы [ 3 ]

0 голосов
/ 09 декабря 2018

Измените ваш запрос на следующий, таким образом, вы показываете только уникальные user_id:

$query = "SELECT DISTINCT user_id FROM users";
0 голосов
/ 09 декабря 2018

В mysql вы можете использовать Different для выбора только уникальных полей в вашей таблице.

$query = "SELECT distinct user_id FROM users";
$stmt = $db->prepare($query);
$stmt->execute();
$count = $stmt->rowCount();
0 голосов
/ 09 декабря 2018

Следующий запрос даст различное количество пользователей:

$query = "SELECT COUNT(DISTINCT user_id) AS cnt FROM users";
$stmt = $db->prepare($query);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
echo "distinct user count: " . $row['cnt'];

Невозможно получить все записи и различное количество в одном запросе.

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

...