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