0

組み合わせる方法を理解できないように見えるステートメントがいくつかあります。

現在、私のコードは次のようになっています。

if(!$question && $filter){
    $qry = mysql_query("SELECT * FROM mbr_qa_questions WHERE q_tags RLIKE '[[:<:]]" . $filter . "[[:>:]]' ORDER BY q_id ASC LIMIT $start, 1 ");
} else if($question && !$filter){
    $qry = mysql_query("SELECT * FROM mbr_qa_questions WHERE MATCH (q_title, q_description, q_tags) AGAINST ('$question') ORDER BY q_id ASC LIMIT $start, 1 ");
} else if($question && $filter){
    //NEED A COMBINED QUERY OF THE FIRST TWO HERE.
} else {
    $qry = mysql_query("SELECT * FROM mbr_qa_questions ORDER BY q_id ASC LIMIT $start, 1");
}

いくつかの列 ( q_title, q_description, q_tags) にインデックスが付けられていますが、これらのステートメントのどれもが十分に効率的かどうかはわかりません。

簡単に言えば、次のステートメントが必要です。

SELECT * FROM mbr_qa_questions WHERE q_tags RLIKE '[[:<:]]" . $filter . "[[:>:]]' ORDER BY q_id ASC LIMIT $start, 1

そしてこの声明:

SELECT * FROM mbr_qa_questions WHERE MATCH (q_title, q_description, q_tags) AGAINST ('$question') ORDER BY q_id ASC LIMIT $start, 1

単一のステートメントに結合されます。また、もしよろしければ、これがどれほど非効率的であるかを教えてください。また、より良い方法を提案していただけませんか?

4

1 に答える 1