2015-10-26 48 views
0


比方说,我有这个表:MySQL的多个查询或多个“或”运营商

img_id, img_author, img_path 
1  | BillyDoe | img1.jpg 
2  | BillyDoe | img2.jpg 
3  | BillyDoe | img3.jpg 

我运行符合某些特定指标分析 和查询将返回类似于数组许多img_author名称另一个查询: BillyDoe,JillDoe,JOHNDOE等等

我会做的第二件事是让所有从图像表匹配的作者名的图像

会是最好创建一个循环的所有作者 名之前的查询返回,并多次运行查询,像这样

select img_path from images_table where img_author = $curr_author_name 

或者 我应该创建一个自定义函数,将参加所有的作者姓名和 运行具有多个单个SQL查询“或”运营商,像这样:

select img_path from images_table where img_author = BillyDoe or img_author = JillDoe or img_author = JohnDoe ... x100 times 

请问我有什么样的性能损失/收益做任一 两种方式?或者有更好的选择,比如多重查询等等。 总是说话表现明智,哪种方法会减少资源 激烈?

谢谢。

+0

很确定你需要在那里转义那些字符串,因为'img_author = BillyDoe'不是有效的SQL,除非'BillyDoe'是一个列。 – tadman

+0

是在同一个表格或不同的表格上查找作者的第一个查询吗? –

+0

使用'OR's使用一个查询。有作者'id's并使用可能使用'IN()'子句会更好。 – AbraCadaver

回答

2

我会用连接做一个单一的查询,这样你就可以查询你正在查找的img_author名字,然后连接这个表来获得img_path信息。

您没有显示您提到的第一个查询来确定作者姓名,所以我不能给你一个具体的例子。但该查询可能是这样的:除非你有一个非常特殊的理由这样做,并了解性能权衡

SELECT 
    it.img_path AS img_path 
FROM 
    whatever_table_is_in_your_first_query AS x 
INNER JOIN 
    img_table AS it 
ON x.author = it.img_author 
WHERE 
    ... /* whatever criteria you use to get author names */ 

在嵌套循环做询问绝对应该被认为是避免反模式。

+0

感谢您的回答! – inrob