Mysql 使用SQL中的特定标记查找最活跃的用户
这是一个用户可以上传图片并在描述中使用标签的网站。我想找出谁是最活跃的用户张贴图片使用特定的标签在过去10天Mysql 使用SQL中的特定标记查找最活跃的用户,mysql,sql,Mysql,Sql,这是一个用户可以上传图片并在描述中使用标签的网站。我想找出谁是最活跃的用户张贴图片使用特定的标签在过去10天 $q2 = $db->prepare('SELECT * FROM cards_tags JOIN cards ON cards_tags.card_id = cards.id JOIN users ON cards.user_id = users.id
$q2 = $db->prepare('SELECT *
FROM cards_tags
JOIN cards ON cards_tags.card_id = cards.id
JOIN users ON cards.user_id = users.id
WHERE cards_tags.date_time > DATE_SUB(CURDATE(), INTERVAL 10 DAY)
AND cards_tags.tag_id = :tag_id');
$q2->execute([':tag_id' => $tag->id()]);
while($data = $q2->fetch())
{
echo $data['user'].' posts with the tag id : '.$tag->id().'<br>';
}
以下是表格:
卡片(帖子)
卡片\u标签
+----+---------+--------+---------------------+
| id | card_id | tag_id | date_time |
+----+---------+--------+---------------------+
| 1 | 1 | 1 | 2020-01-25 12:46:00 |
| 2 | 1 | 2 | 2020-01-24 13:26:00 |
| 3 | 1 | 3 | 2020-01-23 14:46:00 |
| 4 | 2 | 1 | 2020-01-22 15:51:00 |
| 5 | 2 | 3 | 2020-01-21 12:52:00 |
+----+---------+--------+---------------------+
+----+---------+-------+
| id | name | ect.. |
+----+---------+-------+
| 1 | bush | |
| 2 | clinton | |
| 3 | obama | |
| 4 | trump | |
| 5 | reagan | |
+----+---------+-------+
用户
+----+---------+--------+---------------------+
| id | card_id | tag_id | date_time |
+----+---------+--------+---------------------+
| 1 | 1 | 1 | 2020-01-25 12:46:00 |
| 2 | 1 | 2 | 2020-01-24 13:26:00 |
| 3 | 1 | 3 | 2020-01-23 14:46:00 |
| 4 | 2 | 1 | 2020-01-22 15:51:00 |
| 5 | 2 | 3 | 2020-01-21 12:52:00 |
+----+---------+--------+---------------------+
+----+---------+-------+
| id | name | ect.. |
+----+---------+-------+
| 1 | bush | |
| 2 | clinton | |
| 3 | obama | |
| 4 | trump | |
| 5 | reagan | |
+----+---------+-------+
我得到了这个SQL查询,它提供了过去10天使用特定标记的用户列表
$q2 = $db->prepare('SELECT *
FROM cards_tags
JOIN cards ON cards_tags.card_id = cards.id
JOIN users ON cards.user_id = users.id
WHERE cards_tags.date_time > DATE_SUB(CURDATE(), INTERVAL 10 DAY)
AND cards_tags.tag_id = :tag_id');
$q2->execute([':tag_id' => $tag->id()]);
while($data = $q2->fetch())
{
echo $data['user'].' posts with the tag id : '.$tag->id().'<br>';
}
$q2=$db->prepare('SELECT')*
从卡片到标签
在卡片上加入卡片\u标签。卡片\u id=卡片.id
加入卡上的用户。user\u id=users.id
其中cards_tags.date_time>date_SUB(CURDATE(),间隔10天)
和卡片_tags.tag_id=:tag_id');
$q2->execute([':tag_id'=>$tag->id());
而($data=$q2->fetch())
{
echo$data['user'].'posts的标记id为:'.$tag->id();
}
但是,我想知道用户在过去10天内使用特定标签的次数,并按用户ID对其进行分组
这是我到目前为止提出的,但它不起作用:
$q2 = $db->prepare('SELECT *, COUNT(users.id) AS occurrence
FROM cards_tags
JOIN cards ON cards_tags.card_id = cards.id
JOIN users ON cards.user_id = users.id
WHERE cards_tags.date_time > DATE_SUB(CURDATE(), INTERVAL 10 DAY)
AND cards_tags.tag_id = :tag_id
GROUP BY users.id');
$q2->execute([':tag_id' => $tag->id()]);
while($data = $q2->fetch())
{
echo $data['user'].' is trending with '.$data['occurrence'].' posts with the tag id : '.$tag->id().'<br>';
}
$q2=$db->prepare('SELECT*,将(users.id)计数为事件
从卡片到标签
在卡片上加入卡片\u标签。卡片\u id=卡片.id
加入卡上的用户。user\u id=users.id
其中cards_tags.date_time>date_SUB(CURDATE(),间隔10天)
和卡片\u tags.tag\u id=:tag\u id
按用户分组。id');
$q2->execute([':tag_id'=>$tag->id());
而($data=$q2->fetch())
{
echo$data['user'].'正在以“$data['occurrence']”为趋势。使用标记id:“.$tag->id()”。
”;
}
使用以下查询,可能会对您有所帮助:
选择cards\u tags.tag\u id,计数(users.id)作为发生次数
从卡片到标签
在卡片上加入卡片\u标签。卡片\u id=卡片.id
加入卡上的用户。user\u id=users.id
其中cards_tags.date_time>date_SUB(CURDATE(),间隔10天)
和卡片\u tags.tag\u id=:tag\u id
按用户分组。id') “不工作”是什么意思?如果仅从用户
中选择列,则查询应该可以:
SELECT u.*, COUNT(*) AS occurrence
FROM cards_tags ct JOIN
cards c
ON ct.card_id = c.id JOIN
users u
ON c.user_id = u.id
WHERE ct.date_time > DATE_SUB(CURDATE(), INTERVAL 10 DAY) AND
ct.tag_id = :tag_id
GROUP BY u.id
ORDER BY occurrence DESC;
我添加了一个
排序依据
,以便与您的问题更为一致。您通常分组依据
与选择
相同的列,但那些是设置函数的参数的列除外。我想您可能希望选择卡片_tags.tag\u id,计数(users.id)作为出现次数。。。按卡分组\u标签。标签\u id