2014-07-20 37 views
0

我已经达到了我想要的php代码。但是,我的网站速度太慢,因为它保持了一遍又一遍重复,圆,mysql query根据2个tabels选择

$pages= mysql_query("SELECT * FROM ex_instagram_p WHERE type = '".follow."' AND active=1 And username !='".$username."' ORDER BY cpc DESC"); 
$prow = mysql_fetch_array($pages); 



Do{ 
$dollowed = mysql_query("SELECT * FROM exchanges WHERE user = '".$username."' AND exid = '".$prow['id']."'"); 

$followed = mysql_num_rows($dollowed); 
;}while($followed > 0 && $prow = mysql_fetch_array($pages)); 

其实我可以解释代码多一点, 我需要选择从第一个表中的最高每次点击费用列 但也确保:

type = '".follow."' AND active=1 And username !='".$username."' ORDER BY cpc DESC" 

这里来的问题, 延续之前我需要确保的是,“ID”字段形成第一台开不得到记录与用户名的第二个表,

它得到的结果会重复使用下一行, 一遍又一遍,直到找到满足这两个表的结果。 这种方法SOOOO重

我希望得到一个简单且轻量的方式,感谢

我试图做到这一点,但它不工作

$prow= mysql_query("SELECT * 
FROM (mysql_query("SELECT * FROM ex_instagram_p WHERE type = '".follow."' AND active=1   
And username !='".$username."' ORDER BY cpc DESC");) 
INNER JOIN (mysql_query("SELECT * FROM exchanges WHERE user = '".$username."'");) 
ON ex_instagram_p.id=exchanges.exid";); 
+0

旧的'mysql' php扩展名被弃用是有原因的。你真的应该移植到更新的'mysqli'扩展名或'PDO'并开始使用'prepared statements'。 – arkascha

回答

1

您可以在一个做到这一点查询。这是一个有点难以遵循的逻辑,但我认为这是你想要的查询:

SELECT i.* 
FROM ex_instagram_p i join 
    exchanges e 
    on i.id = e.exid 
WHERE i.type = '".follow."' AND i.active=1 And 
     i.username <> '".$username."' and e.user = '".$username."' 
ORDER BY i.cpc DESC 
LIMIT 1; 

做数据库的工作通常比通过在应用循环行快得多。毕竟,这就是数据库的优点 - 管理和查询大量数据。

+0

其实我需要如果没有条目交换表得到的值 用户 - exid $ username - i.id 如果这不存在是应该继续 – Amromtm