2014-10-02 59 views
1

再选择我有,我不记得如何管理查询一个小问题。 这是phpMyAdmin的我的数据库结构:MySQL的选择,或者使用PHP

表用户

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()) 
} 

回答

2

您可以使用INNER JOINCOUNT组合,并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将是相关单词的点击次数。

UPDATE

如果你也想获得每个字的请求的数量,使用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将是相关字词的请求数。

+0

真的,太感谢你了,我不记得这个方法,也许太多的时间没有编写查询:) – CapitanFindus 2014-10-02 12:13:11

+0

我想如果也显示与这个词的请求的数量? – CapitanFindus 2014-10-02 13:11:26

+0

查看已更新的答案。 – ekad 2014-10-02 13:17:44