2011-03-30 52 views
0

我很头疼加入我的桌子。目前我用这种方式我如何通过订单加入两张桌子

<?php 
$result = $db->query("SELECT COUNT(*) AS rows, ad_userid 
FROM ads 
GROUP BY ad_userid 
ORDER BY rows DESC 
LIMIT 5 
"); 
while ($top = $db->fetch($result)) { 
    $selectuser = $db->query("SELECT * 
         FROM users 
         WHERE user_id='".intval($top['ad_userid'])."' 
         "); 
    $user = $db->fetch($selectuser); 
?> 
<li><a href="<?php echo $url;?>/user/<?php echo $user['user_id']; ?>/"><?php echo $user['user_name'].' '.$top['rows']; ?></a></li> 
<?php } ?> 

结果很好,但让我知道一个简单的方法来加入此表。

回答

1

尝试用子查询:

SELECT * 
FROM (
    SELECT COUNT(*) AS rows, ad_userid 
    FROM ads 
    GROUP BY ad_userid 
    ORDER BY rows DESC 
    LIMIT 5 
) AS t1 LEFT JOIN users AS t2 ON t2.user_id = t1.ad_userid 

UPDATE(@Marc B) 从MySQL的文档。

有一些错误只适用于子查询 。本节介绍 他们。 ...不支持子查询 语法:

ERROR 1235(ER_NOT_SUPPORTED_YET) SQLSTATE = 42000消息= “这 的MySQL版本尚不支持 'LIMIT & IN/ALL/ANY/SOME子查询'” 这意味着该格式如下 的陈述还不能正常工作:从T1

SELECT *其中S1 IN(SELECT S2 FROM T2 ORDER BY S1 LIMIT 1)

这CORRE ct Mark,LIMIT在子查询中不受支持,但仅当在IN/ALL/ANY/SOME中使用时...您可以在FROM子句中自由使用它。

我刚刚写了这种查询几个小时前,它似乎工作正常。

+0

MySQL在子查询中不支持LIMITS。 – 2011-03-30 20:30:43

+0

谢谢你的工作。 @Marc B看起来像它支持:) – wow 2011-03-30 20:36:04