2012-10-02 4 views
2

두 개의 테이블이 있습니다. 하나는 아티스트 (artist_id, artist_name)이고 하나는 트랙 (track_id, artist_id, track_title)입니다.스핑크스 및/또는 mysql을 사용하여 두 개의 테이블을 검색 하시겠습니까?

"더 나은 사람 진주 잼"과 같은 쿼리를 처리 할 수 ​​있기를 원하지만 어떻게 작동하는지 논리에 대해 생각하는 데 문제가 있습니다. 더 나은 사람은 트랙 제목이고 진주 잼은 아티스트 이름입니다.

우리는 현재 검색 엔진 (아티스트 및 트랙 개별)을 처리하기 위해 스핑크스를 사용하고 있습니다.

여기에 대해 효율적인 방법이 있습니까?

답변

3

누군가가 트랙과 아티스트 모두와 일치하는 검색을 수행하면 트랙을 찾고 있다고 생각합니다. 이 경우 원하는 행동은 무엇입니까? 귀하의 의견을 바탕으로

, 당신의 스핑크스 쿼리이 다음과 같아야합니다

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

당신이 PHP를 사용하는 경우, 코드가 같은 것을 보일 것이다 :

$ 고해상도 = $ SC-을> 쿼리 ($ 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"; 
} 
+0

정확하게하려면 트랙 결과를 표시하십시오. 예술가가 진주 잼인 더 나은 남자를 보여줄뿐입니다. – Mike

+0

내 답글을 편집하여 내 의견에 답변했습니다. – StackOverflowed

+0

나는 그것이 내가 혼란스러워하는 곳이라고 생각한다. 내가 쓴 지수는 어느 것입니까? 트랙 색인, 아티스트 색인 또는 둘 다? 이 문제를 해결하기 위해 새 색인을 만들었습니까? 그리고 당신의 논리는 역으로 작동 할 것입니다 : 진주 잼 더 나은 남자 – Mike

관련 문제