php - MySQL中SQL语句的问题

标签 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 匹配)

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

最佳答案

您应该将 JOIN 条件放在 ON 之后。像这样:

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

但真正的问题是对于 wp_users 中的每个相应记录,您在 user_details 中有超过 1 条记录(反之亦然)。 INNER JOIN 导致数据库生成 Cartesian product user_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";

关于php - MySQL中SQL语句的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6311404/

相关文章:

mysql - 如何显示MySQL中的表?一直显示空集

sql - ORA-01843不是有效的月份-比较日期

java - 如何在 Java 应用程序中设置 SQL 数据库连接?

php - 使用 Laravel 和 Mysql 处理超过 1 亿条记录

sql - GROUP BY 外键和日期范围

php - XSS 是否可以通过 @import 实现,如果可以,如何实现?有办法预防吗?

php - 如何从多个 mysql 表中获取数据并存储在用户 session 中?

javascript - 通过 Mailchimp 返回错误、Javascript 和 php 提交电子邮件

php - 您可以使用 PHP Explode() 来帮助防御注入(inject)攻击吗?

php - Simplexml_load_string($string) 返回一个空对象但 $string 包含 xml?下面的代码