2011-02-03 39 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));