这是我的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
加入的次数。因此,我建议翻转表名("给他们习惯的东西。")
编辑:;澄清(为了花生画廊的利益…):;这两种形式的所谓"外部联接"是等价的。术语LEFT
和RIGHT
只是指两个表中的哪一个是主表。。。"LEFT
一侧的",单词JOIN
之前的,(原始帖子中显示的查询中的postImg
),或"RIGHT
一侧的"单词JOIN
之后的。(user
)我所称的"master"中的所有行都将被返回,以及在"other"表中可能找到的任何匹配值。
无论出于何种原因,我很少在生产代码中使用RIGHT
联接。当然,这并不是说它们不能完成,只是我观察到(通常)不能完成。