INNER JOIN导致没有行

时间:2014-07-19 14:37:36

标签: php mysql join

我在表格中有产品详情,比如products,不同表格中的类别和品牌名称为categoriesbrand。我想在查询中加入这些内容。我使用的查询是,

$sql = "
SELECT p.pid
     , p.name
     , p.slug
     , p.category
     , c.name
     , p.brand
     , b.name
  FROM products p
  JOIN categories c
    ON c.sno = p.category
  JOIN brand
    ON b.sno = p.brand 
 WHERE p.sku=?
";

此查询不返回任何行。但是,产品,类别和品牌表中都有数据。

我的查询中是否有任何逻辑错误?

产品表

enter image description here

分类表

enter image description here

品牌表

enter image description here

1 个答案:

答案 0 :(得分:2)

评论时间有点长。

对于您显示的数据,您的查询应该有效。我首先删除where子句并运行:

SELECT products.pid, products.name, products.slug, products.category, categories.name, products.brand, brand.name
FROM `products` 
INNER JOIN `categories` on products.category = categories.sno 
INNER JOIN `brand` on products.brand = brand.sno ;

(您应该直接在数据库上运行;如果有大量数据,只需输入limit 100即可查看是否有任何数据。) 如果这不返回任何内容,则表示联接有问题。查看字段的类型。它们是一样的吗?如果没有,请修复数据结构。如果它们是字符,请检查前导空格和隐藏字符。

如果该查询返回您期望的内容,则问题与skus匹配。最可能的问题是在php中赋值。检查这是否真的做你想要的。再次检查sku列和值中的前导空格。如果这是问题,您可以使用trim()来解决问题。