我正在运行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匹配)时基本上从表中选择
问题是它显示重复记录。我该如何解决这个问题?
答案 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 product个user_details
和wp_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";