2014-04-01 19 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 
...