使用PHP的MySQL SELECT或SUBSELECT

时间:2014-10-02 11:52:40

标签: php mysql sql select

我对查询有一点问题,我不记得如何管理。 这是我在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())
}

1 个答案:

答案 0 :(得分:2)

您可以结合使用INNER JOINCOUNTGROUP 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将是相关单词的请求数。