2017-08-28 67 views
1

示例表:MySQL的限制2比兩個查詢性能

id  name   alias_page   lang  content 
1 nombre_pagina  nombre_pagina  es  spanish content 
2 page_name   nombre_pagina  en  english content 
3 pagina_2   pagina_2    es  spanish content 

在上面的表中的每個頁面只有一種語言在他們的母語和alias_page名稱(西班牙語這裏)

返回英語頁面(ID = 2),因爲比賽alias_page和郎

SELECT * FROM content 
WHERE 
    (name = 'nombre_pagina' OR alias_page = 'nombre_pagina') 
AND 
    lang = 'en' 
LIMIT 1;  

但是,如果在所要求的語言不存在(例如:pagina_2)的頁面,我需要用另一種語言檢索(SP自動翻譯用途變更阿尼什默認)

我的解決方案1(結果將在PHP管理):

SELECT * FROM content 
WHERE 
    (name = 'pagina_2' OR alias_page = 'pagina_2') 
AND 
    (lang = 'en' OR lang = 'es') 
LIMIT 2; 

我溶液2:

SELECT SQL_CALC_FOUND_ROWS * FROM content 
WHERE 
    (name = 'pagina_2' OR alias_page = 'pagina_2') 
AND 
    (lang = 'en') 
LIMIT 1; 

if(FOUND_ROWS() = 0) THEN 
    SELECT FROM content 
    WHERE 
     (name = 'pagina_2' OR alias_page = 'pagina_2') 
    AND 
     (lang = 'es') 
    LIMIT 1;  
END IF; 

其中兩個是更好的? 還是另一種解決方案比兩者都好?

回答

1

您可以使用您的原始查詢,稍做修改,將所需語言放在結果集的頂部。然後,使用LIMIT因爲你已經是:

SELECT * 
FROM content 
WHERE 
    (name = 'nombre_pagina' OR alias_page = 'nombre_pagina') 
ORDER BY 
    CASE WHEN lang = 'en' THEN 0 ELSE 1 END 
LIMIT 1; 

如果有內容的英文版本,它會通過上面的查詢返回,即使在其他語言中存在的相同的內容。如果英語不可用,但例如西班牙人,那麼這個替代內容將被退回。

+0

是sr。這看起來好像看起來好多了。謝謝 – MTK