我有一个查询的小问题,我不记得如何管理。 这是我在 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
是请求次数相关词。
关于php - MySQL SELECT 或 SUBSELECT 与 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26160215/