我对查询有一点问题,我不记得如何管理。 这是我在phpmyadmin上的数据库结构:
表用户
hid(PK)
表格请求
id (PK), hid, word, time
表单击
id, rid (FK)
问题是我需要获得请求的数量和每个单词的点击次数,给定hid
以及两个日期之间,我不记得该怎么做。
我尝试选择所有单词,然后在while循环中执行查询以选择请求和点击次数,但它总是超过30秒超时。
这就是我所做的,显然没有结果:
$q1="SELECT kwd,id FROM requests
WHERE hid='$hid'
AND time BETWEEN '$date1 $hour1:00:00' AND '$date2 $hour2:00:00'
LIMIT $limit,50";
$qr1=mysql_query($q1) or die (mysql_error());
while(($r=mysql_fetch_assoc($qr1))!=null)
{
$k=$r['kwd'];
$q2="SELECT * FROM requests
WHERE hid='$hid'
AND time BETWEEN '$date1 $hour1:00:00' AND '$date2 $hour2:00:00'
AND kwd='$k'
LIMIT $limit,50";
$qr2=mysql_query($q2) or die (mysql_error())
}
答案 0 :(得分:2)
您可以结合使用INNER JOIN,COUNT和GROUP BY
$q1="SELECT r.kwd, COUNT(c.id) as NumberOfClicks FROM click c
INNER JOIN requests r ON r.id = c.rid
WHERE r.hid='$hid'
AND r.time BETWEEN '$date1 $hour1:00:00' AND '$date2 $hour2:00:00'
GROUP BY r.kwd
LIMIT $limit,50";
$qr1=mysql_query($q1) or die (mysql_error());
while(($r=mysql_fetch_assoc($qr1))!=null)
{
$k=$r['kwd'];
$c=$r['NumberOfClicks'];
}
在上面的代码中,$k
将是单词,$c
将是相关单词的点击次数。
<强>更新强>
如果您还想获得每个字词的请求数量,请使用RIGHT JOIN
,因为可能会有请求没有任何相关点击。
$q1="SELECT r.kwd,
COUNT(c.id) AS NumberOfClicks,
COUNT(r.kwd) AS NumberOfRequests
FROM click c
RIGHT JOIN requests r ON r.id = c.rid
WHERE r.hid='$hid'
AND r.time BETWEEN '$date1 $hour1:00:00' AND '$date2 $hour2:00:00'
GROUP BY r.kwd
LIMIT $limit,50";
$qr1=mysql_query($q1) or die (mysql_error());
while(($r=mysql_fetch_assoc($qr1))!=null)
{
$k=$r['kwd'];
$c=$r['NumberOfClicks'];
$requests=$r['NumberOfRequests'];
}
$k
将是单词,$c
将是点击次数,$requests
将是相关单词的请求数。