MySQL中的SQL语句问题

时间:2011-06-10 19:52:29

标签: php mysql sql select join

我正在运行SQL语句:

$sql = "SELECT pic, userid 
        FROM user_details 
          INNER JOIN wp_users ON user_details.userid  
        WHERE wp_users.id = user_details.userid 
        LIMIT $recordstart, $pagesize
       ";

该查询用于从user_details和wp_users中选择记录,但只应选择是否存在匹配(wp_users.id = user_details.userid)。

目标是在从其他表中检索记录(基于id匹配)时基本上从表中选择

问题是它显示重复记录。我该如何解决这个问题?

6 个答案:

答案 0 :(得分:3)

你应该在ON之后加入你的JOIN条件。像这样:

$sql="select pic, userid 
      from user_details 
      inner join wp_users on (wp_users.id=user_details.userid)
      limit $recordstart, $pagesize";

但真正的问题是,user_details中每个相应记录的wp_users中有超过1条记录(反之亦然)。 INNER JOIN使数据库生成Cartesian productuser_detailswp_users条记录。然后,结果表将按当前的WHERE条件(wp_users.id = user_details.userid)进行过滤。取决于您的需求,如果您只想检索唯一记录,可以使用GROUP BY或DISTINCT。 例如,如果您需要userid是唯一的:

$sql="select pic, userid 
      from user_details 
      inner join wp_users on (wp_users.id=user_details.userid)
      group by userid
      limit $recordstart, $pagesize";

答案 1 :(得分:2)

SELECT DISTINCT pic, userid 
FROM user_details 
  INNER JOIN wp_users ON wp_users.id=user_details.userid 
LIMIT $recordstart, $pagesize

答案 2 :(得分:1)

使用DISTINCT仅返回唯一的行,并在ON部分中填写您的加入条件:

$sql="select distinct pic, userid
      from user_details
      inner join wp_users on wp_users.id=user_details.userid
      limit $recordstart, $pagesize"; 

答案 3 :(得分:0)

使用GROUP BY,因为如果第一个表中的一个记录中第二个表中有多个记录,它会显示重复记录

答案 4 :(得分:0)

你偶然遗漏了ON的=部分。

$sql="select pic, userid 
      from user_details 
        inner join wp_users on user_details.userid
        = wp_users.id  
      where wp_users.id=user_details.userid   
  limit $recordstart, $pagesize";

答案 5 :(得分:0)

我可能会尝试

 $sql = "select pic, userid 
 from user_details 
 inner join wp_users on user_details.userid = wp_users.id
 limit $recordstart, $pagesize";