如何使用Join从两个表中搜索数据


How Do I Search Data From Two Tables using Join

这是我的SELECT查询,用于从数据库中搜索用户。问题是,我只能得到那些在postImg表中发布了任何内容的用户的搜索结果。否则找不到用户。我想以这样一种方式搜索,即使任何用户没有发布任何帖子,也应该找到它。我正在使用这个查询:

 <?php 
        $sql =  "SELECT * FROM postImg LEFT JOIN user ON postImg.userID=user.userID 
        WHERE user.userID='".$page_owner."' AND (userName LIKE '%".$searchVal."%') GROUP BY user.userID ";
        $res3 = mysql_query($sql) or die(mysql_error());
        while($row2=mysql_fetch_assoc($res3)){
        echo $row2['userName']; // From user Table
        echo $row2['likes'];    // From postImg table
        echo $row2['posts'];    // From postImg table
       } ?>
$sql =  "SELECT * FROM postImg RIGHT JOIN user ON postImg.userID=user.userID 
    WHERE user.userID='".$page_owner."' AND (userName LIKE '%".$searchVal."%') GROUP BY user.userID ";

我认为您想要user LEFT JOIN postImg,而不是像这里那样。

写入的查询将返回来自postImg的每条记录,无论它是否具有关联的user

显然,无论是否有一个postImg,您都需要每个user

顺便说一句,我认为将其更改为RIGHT JOIN也会起作用,正如Robert在他的回答中所建议的那样。但是,我可以用一只手的手指数出我看到RIGHT加入的次数。因此,我建议翻转表名("给他们习惯的东西。")


编辑:;澄清(为了花生画廊的利益…):;这两种形式的所谓"外部联接"是等价的。术语LEFTRIGHT只是指两个表中的哪一个是主表。。。"LEFT一侧的",单词JOIN之前的,(原始帖子中显示的查询中的postImg),或"RIGHT一侧的"单词JOIN之后的。(user)我所称的"master"中的所有行都将被返回,以及在"other"表中可能找到的任何匹配值。

无论出于何种原因,我很少在生产代码中使用RIGHT联接。当然,这并不是说它们不能完成,只是我观察到(通常)不能完成。