2012-04-04 13 views
0

私は著者に基づいて本の検索機能を実装しています。質問された著者が書いたすべての書籍を含む質問結果を返すべきです。ただし、特定の著者名のクエリが複数の結果を返す可能性があります(たとえば、「Smith、W」のクエリが「Smith、Wesson」および「Smith、Will」に一致する可能性があります)。クエリの結果を「連結」することは可能ですか?

私の問題は、これらのさまざまな著者によって書かれたすべての本をどのように「連結」するかということです。私は、クエリに一致する複数の著者の可能性を考慮していない場合は(私の実際のコードが今はかなり厄介であるとして、擬似コードで)、私はこのようなものについては行くだろう:著者のための

  • 検索authorテーブルクエリに一致する
  • GET著者のauthorid

しかし、複数の著者の可能性を、私は心の中でこのような何かを持っている同じauthoridと書籍のレコードの

  • 検索帳テーブル:

    // search author table for authors matching the query 
    
    foreach(author_match as am){ 
        // search book table for book records with authorid=am.authorid 
        // Is there such thing as this? :\ 
        book_results += all the rows returned by previous query 
    } 
    return book_results; 
    

    私はこれをPHP(CodeIgniter Framework)とMySQLで行います。私にこれを可能にする関数/演算子はありますか?はい、私は+=を試しました。たとえそれがあまり期待できなくても、醜い結果になりました。

    もう一度、擬似コードのご迷惑をおかけします。私は自分のコードをクリーンアップし、できるだけ早く編集しようとしますが、その前に答えが来たら、それは素晴らしいものです。ありがとう。 PHPでCONCATENATEを行うに

  • +0

    およびクエリの作成者? – wildplasser

    +2

    Codeigniterはよく分かりませんが、必要なクエリは次のようになります: 'SELECT author。*、book。* FROM author LEFT JOIN book ON author.authorid = book.authorid WHERE author.authorid = ' –

    +0

    私はまだJOINSを調べていません。それらを試して後で報告します。ありがとう。 – skytreader

    答えて

    2

    を私はマイケルに同意する、あなたがINNER JOINLEFT JOINのいずれかが必要になりそうです。あなたはので、ここでCodeIgniterのを使用していると言う

    はCodeIgniterの具体例である:

    $this->db->select('author.*, 
            book.*'); 
    $this->db->from('authors'); 
    $this->db->join('books', 'books.authorid = authors.id', 'left'); 
    $this->db->where('authors.id', $the_author_id); 
    

    も参照してください。

    本を結ぶと間違っている何
    +0

    私のクエリで結合を使用する方法を説明しましたが、CodeIgniter固有の例( - 、) – skytreader

    -1

    、おそらくあなたはJOINをLEFTを使用するようにクエリを変更することができます

    .= 
    
    +0

    '+ ='は擬似コードの一部であり、 '。='は文字列連結子であり、クエリ結果を追加するのにはまったく役に立たない... –

    +0

    彼は文字列を連結したい。もちろん、物事の名前を保存するより良い方法はありません。 変数を宣言し、クエリの結果ループを開き、。=結果を開きます。 –

    +0

    さらに、 '。='は排他的に文字列であり、 '+ ='はumm、他のすべて、数値データなど(明らかにそうではない)であると考えました。はい、私の実際のコードでも、私は '+ ='を試しました。 AFAIKは文字列ではなくポインタ/カーソルであるレコードを連結したい。 – skytreader

    0

    を使用しています。この方法で、1つのクエリで複数のクエリ結果を取得できます。

    +0

    Ummm、MySQLは 'UNION'sを' UNION'sとして実装しています。 LEFT JOINはまったく別のコンセプトです。 –

    1

    .=を連結して連結することができます。しかし、より効率的に、あなたは単にあなたが次の擬似コード持っていると思いますので、SQLで複数のWHERE句を指定することができます。

    search author table for authors matching the query 
    where = 'with ' 
    foreach(author_match as am){ 
    where += 'authorid=' . am.authorid . ' OR' } 
    where = substr(where[0,strlen(where)-3) 
    } 
    search book table for book records [where clause here] 
    return book_results 
    
    関連する問題