подсчитать все сообщения в таблице & quot; posts & quot; в отношении пользователей из таблицы «пользователи»

два стола — posts а также users
колонка posts.user совпадает с users.id,
Я хочу посчитать все сообщения от всех пользователей, таким образом:

user1 5
user2 3
user3 9

… и так далее, что означает, что user1 от users имеет 5 экземпляров из posts… так далее.

$items = '';
$sql = "select users.name, posts.user from users inner join posts on users.id = posts.user";
$stmt = $db->query($sql);
while($row = $stmt->fetch()){
$count = $stmt->rowCount();
$items .= "<div><span class='spanuser'>" . $row['name'] . "</span> <span class='spancount'>" . $count . "</span></div>";
}
echo $items;

результат

user1 74 // 74 is total number of `posts` rows
user2 74
user3 74
... all users - 74

Любая помощь?

0

Решение

Вам нужно использовать GROUP BY с LEFT JOINНапример:

SELECT u.name, COUNT(p.id) AS `count`
FROM users u LEFT JOIN posts p ON u.id = p.user
GROUP BY u.name;

Это даст вам желаемый результат.

Обновить

Согласно нашему обсуждению, чтобы получить счет на сегодня, вы можете использовать следующий запрос:

SELECT u.name, COUNT(p.id) AS `count`
FROM users u LEFT JOIN posts p ON u.id = p.user
WHERE DATE(datetime) = DATE(NOW())
GROUP BY u.name;

Точно так же вы можете использовать BETWEEN Оператор, чтобы получить тот же счет для диапазона дат, например, за последние 7 дней, вы можете использовать это:

SELECT u.name, COUNT(p.id) AS `count`
FROM users u LEFT JOIN posts p ON u.id = p.user
WHERE DATE(datetime) BETWEEN DATE_ADD(NOW(), INTERVAL -7 DAY) AND DATE(NOW())
GROUP BY u.name;

Также вам необходимо обновить php использовать count возвращается по запросу, а не rowCountНапример:

$items .= "<div><span class='spanuser'>" . $row['name'] . "</span> <span class='spancount'>" . $row['count'] . "</span></div>";
1

Другие решения

Попробуйте сделать это таким образом, используя Count()

$items = '';
$sql = "SELECT u.name,COUNT(p.user) as pCount FROM users u INNER JOIN posts p on u.id = p.user GROUP BY u.name";
$stmt = $db->query($sql);
while($row = $stmt->fetch()){
$items .= "<div><span class='spanuser'>" . $row['name'] . "</span> <span class='spancount'>" . $row['pCount'] . "</span></div>";
}
echo $items;
1

Попробуйте использовать COUNT (). Посчитать posts.user

https://www.w3schools.com/sql/sql_count_avg_sum.asp

0

Вы хотите сгруппировать по пользователю и посчитать количество сообщений, чтобы получить итоговую итоговую строку, которую вы хотите WITH ROLLUP например

SELECT COALESCE(User,'TOTAL') AS Name,
Count(Post.ID) AS CountOfPosts
FROM Users
LEFT JOIN Posts ON Posts.USer= Users.id
GROUP BY Users.id WITH ROLLUP

Строка «итого» на самом деле будет иметь значение ноль, поэтому мы используем COALESCE превратить ноль в ИТОГО

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector