如何按顺序将两个表与组连接起来

时间:2011-03-30 20:19:37

标签: mysql

我很头疼加入我的桌子。目前我用这种方式

<?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 个答案:

答案 0 :(得分: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

更新(@Marc B) 来自MySQL doc。

  

有些错误仅适用   到子查询。本节介绍   他们。 ......不支持的子查询   语法:

     

ERROR 1235(ER_NOT_SUPPORTED_YET)   SQLSTATE = 42000 Message =“这个   MySQL版本尚不支持   '限制&amp; IN / ALL / ANY / SOME子查询'“   这意味着该陈述   以下表格尚不起作用:

     

SELECT * FROM t1 WHERE s1 IN(SELECT   s2 FROM t2 ORDER by s1 LIMIT 1)

不支持在子查询中使用正确的Mark,LIMIT,但仅在IN / ALL / ANY / SOME中使用时...您可以在FROM子句中自由使用它。

我几小时前就写过这种查询,看起来效果很好。