我对一个查询有点问题,不记得如何管理。这是我在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())
}
您可以使用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
将是对相关单词的请求次数。