Php 从两个表中获取数据

Php 从两个表中获取数据,php,mysql,codeigniter,Php,Mysql,Codeigniter,我有一个关于加入的问题。基本上有两个表product和product\u boost。表product\u boost将product\u id作为外键,该外键也位于product表中 我希望使用两个表中都可用的join来获取数据,如果不是这样,则只有来自第一个表的数据会出现 我使用的是右外连接,这里是我的查询 SELECT * FROM `vefinder_product` RIGHT OUTER JOIN `vefinder_product_boost` ON `vefinder_prod

我有一个关于加入的问题。基本上有两个表productproduct\u boost。表product\u boost
product\u id
作为外键,该外键也位于product表中

我希望使用两个表中都可用的join来获取数据,如果不是这样,则只有来自第一个表的数据会出现

我使用的是右外连接,这里是我的查询

SELECT * FROM `vefinder_product` 
RIGHT OUTER JOIN `vefinder_product_boost` ON `vefinder_product_boost`.`product_id`=`vefinder_product`.`product_id` 
WHERE `vefinder_product`.`status` = 1 
  AND `vefinder_product`.`post_type` != 5 
  AND `vefinder_product`.`country` IN('348') 
  AND `vefinder_product`.`product_stock` >0 
  AND `vefinder_product`.`product_in_stock` = 1 
  AND `vefinder_product_boost`.`target_age_from` >= 20 
  AND `vefinder_product_boost`.`target_age_to` <= 40  
ORDER BY `vefinder_product`.`is_boosted` DESC, 
         `vefinder_product`.`is_sponsered` DESC, 
         `vefinder_product`.`created_date` DESC LIMIT 21 
从“vefinder\u产品”中选择*
在“vefinder\u product\u boost”上右外连接“vefinder\u product\u boost”。“product\u id”='vefinder\u product`.'product\u id`
其中'vefinder_product`.'status`=1
和“vefinder\u产品”。“post\u类型”!=5.
以及('348'中的'vefinder_product'。'country'
和“vefinder\u product”。“product\u stock”>0
和“vefinder\u product”。“product\u in\u stock”=1
以及“vefinder产品”和“boost”。“目标年龄”从“>=20岁开始

还有“vefinder产品”和“boost”。“target\u age\u to”您可以使用第三方软件,如SQLyog。 连接查询非常简单,只需使用UI构建查询,并为表之间的字段分配关系。 在sqlyog中,您可以从多个表(而不仅仅是两个表)获取数据。 因为我目前正在使用此软件以节省时间。

  • 如果要从第一个(最左侧)表中获取所有数据,请改用
    左联接
    
  • 除第一个表(最左侧)以外的表上的任何
    条件(其中
    条件)都应在
    左联接中切换到
    on
    条件。否则,
    Where
    也会过滤掉不匹配的行(
    null
    在右侧表格中)
请尝试以下操作:

SELECT * 
FROM `vefinder_product` 
LEFT OUTER JOIN `vefinder_product_boost` 
  ON `vefinder_product_boost`.`product_id`=`vefinder_product`.`product_id` AND 
     `vefinder_product_boost`.`target_age_from` >= 20 AND 
     `vefinder_product_boost`.`target_age_to` <= 40 
WHERE `vefinder_product`.`status` = 1 AND 
      `vefinder_product`.`post_type` != 5 AND 
      `vefinder_product`.`country` IN('348') AND 
      `vefinder_product`.`product_stock` >0 AND 
      `vefinder_product`.`product_in_stock` = 1 
ORDER BY `vefinder_product`.`is_boosted` DESC, 
         `vefinder_product`.`is_sponsered` DESC, 
         `vefinder_product`.`created_date` DESC 
LIMIT 21 
选择*
来自“vefinder_产品”
左外连接'vefinder\u product\u boost'
在'vefinder\u product\u boost'。'product\u id`='vefinder\u product`.'product\u id`和
`vefinder\u产品\u提升`.`目标年龄`>=20岁
`vefinder_产品_提升`.`target_age_至`0且
`vefinder_产品`.`库存产品`=1
按“vefinder\u product”订购。“is\u boosted”DESC,
`vefinder_product`.`is_-sposered`DESC,
`vefinder_产品`.`created_date`DESC
限制21

使用left join并将where条件放在cluase上

SELECT * FROM `vefinder_product` 
left OUTER JOIN `vefinder_product_boost` ON `vefinder_product_boost`.`product_id`=`vefinder_product`.`product_id` 
  and `vefinder_product`.`status` = 1 
  AND `vefinder_product`.`post_type` != 5 
  AND `vefinder_product`.`country` IN('348') 
  AND `vefinder_product`.`product_stock` >0 
  AND `vefinder_product`.`product_in_stock` = 1 
  AND `vefinder_product_boost`.`target_age_from` >= 20 
  AND `vefinder_product_boost`.`target_age_to` <= 40  
ORDER BY `vefinder_product`.`is_boosted` DESC, 
         `vefinder_product`.`is_sponsered` DESC, 
         `vefinder_product`.`created_date` DESC LIMIT 21 
从“vefinder\u产品”中选择*
在“vefinder\u product\u boost”上左外连接“vefinder\u product\u boost”。“product\u id”='vefinder\u product`.'product\u id`
和“vefinder\u产品”。“状态”=1
和“vefinder\u产品”。“post\u类型”!=5.
以及('348'中的'vefinder_product'。'country'
和“vefinder\u product”。“product\u stock”>0
和“vefinder\u product”。“product\u in\u stock”=1
以及“vefinder产品”和“boost”。“目标年龄”从“>=20岁开始

还有“vefinder\u product\u boost”。“target\u age\u to`您是否尝试了
左连接
?@Lithilion是的,很遗憾它也不起作用。您可以提供一些示例数据并期望结果吗?如果您只想获取匹配数据,您应该使用Internaljoin@SachinSarola我没有使用内部连接