2015-10-26 34 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