2

2つのテーブルがあります。1つはアーティスト用(artist_id、artist_name)、もう1つはトラック用(track_id、artist_id、track_title)です。

「ベターマンパールジャム」のようなクエリを処理できるようにしたいのですが、これがどのように機能するかについてのロジックを考えるのに苦労しています。パールジャムがアーティスト名である間、より良い人はトラックタイトルです。

現在、検索エンジン(アーティストとトラックを個別に)を処理するためにスフィンクスを使用しています。

これを回避するための効率的な方法はありますか?

4

1 に答える 1

3

トラックとアーティストの両方に一致する検索を行うと、そのトラックを探していると思います。この場合のあなたの望ましい行動は何ですか?

コメントに基づくと、スフィンクスクエリは次のようになります。

SELECT track_id, track_title, artists.artist_id, artist_name FROM tracks
LEFT JOIN artists WHERE artists.artist_id = tracks.artist_id;

PHPを使用している場合、コードは次のようになります。

$ res = $ sc-> Query($ searchString、 "SphinxIndexName");

if (isset($res['matches']) && sizeof($res['matches']) > 0) {
  ids = join(",", array_keys($res["matches"]));
  $query = "SELECT track_id, track_title, artists.artist_id, artist_name FROM tracks
    LEFT JOIN artists WHERE artists.artist_id = tracks.artist_id ORDER BY FIELD(track_id, $ids)";
   // ... query MySQL and display results
}
else {
   echo "no results";
}
于 2012-10-02T20:04:27.060 に答える