2014-04-01 23 views
0

我正在做一个网上商店的搜索功能,并显示结果我试图在多个表上创建一个SQL查询。此查询正在执行:MySQL搜索查询INNER JOIN限制id_image字段结果为每个id_product

SELECT ps_product_lang.id_product , ps_product_lang.name as product_name , 
ps_product_lang.description_short, 
ps_product_lang.link_rewrite as product_link_rewrite , 
ps_product_lang.meta_title , ps_product.reference , 
ps_product.id_category_default , ps_product.on_sale , ps_product.price , 
ps_category_lang.name as category_name , 
ps_category_lang.link_rewrite as category_link_rewrite , ps_image.id_image 
FROM ps_product_lang 
INNER JOIN ps_product 
INNER JOIN ps_category_lang 
ON ps_product.id_category_default=ps_category_lang.id_category 
INNER JOIN ps_image 
ON ps_product_lang.id_product=ps_image.id_product 
WHERE ps_product_lang.name LIKE '%simone%' OR 
ps_product.reference LIKE '%simone%' ORDER BY ps_product_lang.id_product ASC 

在搜索结果中,我只想显示一张图片。但是在上面的这个查询中,我通过所需的id_product获得了所有的id_images。我尝试了不同的方式来限制它:

ON ps_product_lang.id_product=ps_image.id_product = (SELECT id_image FROM ps_image LIMIT 1) 

但是无论我尝试什么,我都没有得到任何结果,或者我的语法错误。谁能给我一个正确的方向?

+0

'ps_image'中的随机图像不太可能与其他'where'子句中的语言和参考条件匹配。 –

回答

0

我太专注于id_image。我想要的只是一次查看单个产品。所以一个简单的小组就可以完成这项工作

SELECT ps_product_lang.id_product , ps_product_lang.name as product_name , ps_product_lang.description_short , ps_product_lang.link_rewrite as product_link_rewrite , ps_product_lang.meta_title , ps_product.reference , ps_product.id_category_default , ps_product.on_sale , ps_product.price , ps_category_lang.name as category_name , ps_category_lang.link_rewrite as category_link_rewrite , ps_image.id_image 
FROM ps_product_lang 
INNER JOIN ps_product 
INNER JOIN ps_category_lang 
ON ps_product.id_category_default=ps_category_lang.id_category 
INNER JOIN ps_image 
ON ps_product_lang.id_product=ps_image.id_product 
WHERE ps_product_lang.name LIKE '%simon%' OR ps_product.reference LIKE '%simon%' GROUP BY ps_product_lang.id_product ORDER BY ps_product_lang.id_product ASC 
1

如果你只是想要每个产品一个图像,使用一个简单的子选择来获得一个图像ID,例如最大图像ID。这意味着:完全删除ps_image的连接。

SELECT 
    ps_product_lang.id_product , ... 
    ps_category_lang.link_rewrite as category_link_rewrite , 
    (
    select max(id_image) 
    from ps_image 
    where id_product = ps_product_lang.id_product 
) as id_img 
FROM ps_product_lang 
...