PHP INNER JOIN两个表ID匹配问题

时间:2015-11-13 16:36:23

标签: mysql left-join inner-join

在我的项目中,我想执行此代码以获得某个结果:

$abc = "SELECT * 
  FROM ptc_ads 
  INNER JOIN ptc_ads_viewed 
    ON ptc_ads.pads_id = ptc_ads_viewed.padv_id 
  WHERE ptc_ads.pads_id != ptc_ads_viewed.padv_ad_id 
    OR ptc_ads_viewed.padv_uname != '".$uname."' 
    AND ptc_ads.pads_group = '1' 
    AND ptc_ads.pads_mem1 = '1' 
  ORDER BY ptc_ads.pads_id DESC";

$res = mysql_query($abc) or die(mysql_error());

我认为问题是我用来加入的字段应该有相同的数据。

如果ptc_ads.pads_id是1,2,3,4,那么ptc_ads_viewed.padv_id也应该是1,2,3,4。但在我的情况下,它不可能有相同的行。

ptc_ads_viewed.padv_id中,行数多于ptc_ads_viewed.pads_id,因此字段不匹配,仅在两行匹配时返回结果。

例如:ptc_ads_viewed.pads_id包含两行,因此它有两个id' s(1,2)和ptc_ads_viewed.padv_id有四个id' s(1,2,3,4) 。所以查询只返回两个表的前两个id的结果(1,2)。 3,4不受影响。但预期结果也是3,4。无论如何,我如何从ptc_ads_viewed.padv_id中的所有行获得结果?

1 个答案:

答案 0 :(得分:1)

您正在使用INNER JOIN - 这意味着您将获得两个表中都存在的结果,因此在您的示例中,您只会获得1和2

您可以使用左连接或右连接,这样您将获得所有结果(左连接意味着 - 第一个表中存在但不存在于第二个表中的行 - 您将从第一个表中获取数据,对于第二个表的列,您将获得空值