【问题标题】:Query echo duplicated values when selecting two tables选择两个表时查询回显重复值
【发布时间】:2013-04-10 19:33:27
【问题描述】:

我有一个打印出所有注册用户的网站。 查询工作正常,直到我想从另一个表中添加值。 现在它打印出重复的值。

假设我有 2 个用户。它应该打印出来

约翰·多伊 简·多伊

但是在添加带有头像的表格后,它会打印出来 约翰·多伊 简·多伊 约翰·多伊 简·多伊

这是我的查询。

<?php 
function fetch_users(){
global $db;
$query = $db->query("SELECT user.id, user.username,user.email, userdetails.profile_img FROM user , userdetails");
$user = array();
while(($row = $query->fetch(PDO::FETCH_ASSOC)) !==FALSE) { 
 $user[] = $row;
}
return $user;
}
?>

但是如果我删除最后添加的表 userdetails 并使用查询而不将表添加到名称中。它又可以正常工作了,但是当然没有头像。

php.

<?php foreach(fetch_users() as $user){  ?>
 <p>
 <a href="profile.php?uid=<?php echo $user['id'];?>"><?php echo $user['username'];?> </a>
 </p>
 <?php
  }
  ?>

【问题讨论】:

  • 您看到的是表格的笛卡尔积,因为您在没有条件的情况下加入表格。尝试指定WHERE caluse

标签: php pdo


【解决方案1】:

您可能想查看MySQL joins.

例如,您可以执行以下操作:

SELECT user.id, user.username, user.email, userdetails.profile_img
FROM user
LEFT JOIN userdetails
ON user.id = userdetails.<user id column name goes here>
GROUP BY user.id

这假设您在 userdetails 表中有(如果没有的话,您肯定应该有)一列,其中包含通过 id 引用用户表的键。

【讨论】:

  • 谢谢,这就像一个魅力,不确定我是否真的需要左连接,但现在我明白了为什么。谢谢老师@Leng​​span>
  • @Dymond 很高兴我能帮上忙。 :)
【解决方案2】:
SELECT user.id, user.username,user.email, userdetails.profile_img FROM user , userdetails

此查询为每个用户和整个 userdetails 表选择一次(John Doe + John Doe | John Doe + Jane Doe | Jane Doe + John Doe | Jane Doe + Jane Doe = 4 行)

你还得写一个条件:

SELECT user.id, user.username,user.email, userdetails.profile_img FROM user , userdetails WHERE user.id = userdetails.id

(假设您在两个表中都有用户 ID)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 2018-09-30
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    相关资源
    最近更新 更多