0

著者に基づく本の検索機能を実装しています。照会された著者によって書かれたすべての本を含む照会結果を返す必要があります。ただし、特定の著者名のクエリが複数の結果を返す可能性があります (たとえば、"Smith, W" のクエリは、"Smith, Wesson" と "Smith, Will" に一致する場合があります)。

したがって、私の問題は、これらの異なる著者によって書かれたすべての本を「連結」する方法です。複数の作成者がクエリに一致する可能性を考慮しない場合は、次のようなことを行います (私の実際のコードは現在非常に面倒なので、疑似コードで):

  • 著者テーブルで著者を検索
  • クエリに一致する
  • 著者のオーソリッドを取得する
  • book テーブルで同じ 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 で行っています。これを可能にする関数/演算子はありますか? +=はい、あまり期待していなかったとしても、醜い出力を試してみました。

繰り返しになりますが、疑似コードについてお詫び申し上げます。コードをクリーンアップしてできるだけ早く編集しようとしますが、その前に答えがあれば、それは素晴らしいことです. ありがとう。

4

4 に答える 4

2

INNER JOIN私はマイケルに同意します、あなたはまたはのどちらかが必要なようですLEFT 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);

以下も参照してください。

于 2012-04-04T20:22:28.963 に答える
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
于 2012-04-04T20:11:28.113 に答える
0

おそらく、LEFT JOIN を使用するようにクエリを変更できます。このようにして、1 つのクエリで複数のクエリ結果を取得できます。

于 2012-04-04T20:10:40.423 に答える
-1

PHPで連結するには、次を使用します

.=
于 2012-04-04T20:07:09.177 に答える