2011-02-03 8 views
1

Je crée une fonction pour obtenir tous les mots clés à partir d'une base de donnéesrequête la plus efficace?

La base de données a deux tables

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

les fonctions signature est

getKeywords($id = null){}

donc la façon cela fonctionne est,
si id! = null a où la clause est ajoutée qui doit limiter le jeu de résultats aux mots-clés où ktl.templateId = $id

Quel serait le moyen le plus efficace d'obtenir cette requête?

Im penser SELECT id, keyword FROM keywords k, templatekeywordlink tkl WHERE tkl.templateId= $id AND tkl.keywordId = k.id AND k.account=$account

Y at-il une meilleure façon?

Répondre

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

est intelligent, mais ternaires 'if' est plus lisible et est encore une ligne dans ce cas ...' if ($ id! = Null) $ query. = "..." ' –

+0

Ouais c'est vrai et votre solution est encore plus courte! – gnur

1

Il est généralement une mauvaise pratique de créer sql par concaténation variables de cette façon ..

Si vous ne voulez pas un script kiddie vous pwn par injection sql, utilisez prepared queries.

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

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

Im réellement en utilisant l'allumeur de code, la seule raison que je l'écris ici comme ceci est, les gens qui vous aident n'ont pas besoin de connaître les fonctions de CI, ils peuvent simplement écrire sql et mal traduire en utilisant les fonctions; – Hailwood

Questions connexes