2011-02-03 73 views
1

我創建一個函數從數據庫中獲取所有關鍵字最有效的查詢?

數據庫有兩個表

 
keywords    [id   | word  | account] (aliased as k) 
keywordsTemplateLink [templateId | keywordId]    (aliased as ktl) 

功能的簽名是

getKeywords($id = null){}

這樣的方式它的工作原理是,
if id!= null a where子句被添加,它必須將結果集限制爲關鍵字ktl.templateId = $id

什麼是最有效的方法來實現此查詢?

即時通訊思想SELECT id, keyword FROM keywords k, templatekeywordlink tkl WHERE tkl.templateId= $id AND tkl.keywordId = k.id AND k.account=$account

有沒有更好的辦法?

回答

3
function getKeywords($id = null){ 
//query generated by function 
$query .= ($id != null) ? ' where ktl.templateId = ' . $id : ''; 
} 
+1

三元是聰明,但`if`是更具可讀性和仍然在這種情況下,一行...`如果($ ID!= NULL)$查詢=「...」` – 2011-02-03 20:36:11

+0

是啊,這是真的你的解決方案更短! – gnur 2011-02-03 20:39:26

1

它通常是不好的做法,用這種方式來創建可變串聯SQL ..

如果你不希望一些腳本小子通過SQL注入PWN你,使用prepared queries

$stm = $dbo->prepare("SELECT id, keyword FROM keywords k, templatekeywordlink tkl WHERE tkl.templateId= ? AND k.account=?); 

$stm->execute(array($id,$account));