2011-02-03 12 views
1

私はデータベースに2つのテーブル最も効果的なクエリですか?

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

を持っている機能の署名が

getKeywords($id = null){}

そうな方法でデータベース

からすべてのキーワードを取得する関数を作成していますそれは動作します、
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'をより読みであり、この場合には、まだ1行です...'もし($ ID!= null)の$クエリです。= "..." ' –

+0

うんそれは本当ですあなたのソリューションはさらに短くなります! – gnur

1

このように変数を連結することで、SQLを作成するために、一般的に悪い習慣..です

あなたには、いくつかのスクリプトキディがprepared queriesを使用して、SQLインジェクションでごPWNしたくない場合。

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

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

実際にコードイグナイタを使用していますが、私がここに書いている理由は、CIの機能を知る必要がない人たちです。 – Hailwood

関連する問題