2016-10-06 1 views
0

사용자가 선택한 장르를 포함하는 테이블에서 행을 쿼리하려는 다중 선택 모드 recyclerview를 구현했습니다. 사용 가능한 장르 목록을 표시하고 사용자는 하나 이상의 장르를 선택할 수 있습니다. 그런 다음 선택한 장르에 만족하면 사용자는 방금 선택한 장르에 따라 음악 목록을 가져와야합니다. 쿼리를 시도 할 때 결과가 없습니다.여러 문자열 또는 목록의 표에있는 android 쿼리 행 <string>

List<Genre> 안에있는 값을 포함하는 행을 어떻게 쿼리합니까? 제발 도와주세요 또는 제안.

이 내가 RNB을 선택한 경우, 장르 등의 팝 쿼리 결과가 이것은

I love you 
Fall 

표시해야

------------------------------------------------------ 
    | id | music_title | artist |  genre   | 
    ------------------------------------------------------ 
    | 1 | I love you | John | pop, rnb, jazz | 
    | 2 | Fall  | Hank | rnb    | 
    | 3 | Marry Me | Joe | jazz, rock  | 
    ------------------------------------------------------ 

음악 테이블 인

public List<Music> getMusicBasedOnGenre(List<String> genre) { 
     List<Music> musicList= new ArrayList<>(); 
     sqLiteDatabase = this.getReadableDatabase(); 
     try { 
     for(int i = 0; i < size; i++) { 
      Cursor cursor = sqLiteDatabase.rawQuery("SELECT a.music_title AS MusicTitle" 
       + ", GROUP_CONCAT(t.genre) AS Genre FROM music AS a" 
       + " LEFT JOIN genre_tags AS gt ON gt.id_music = a.music_id" 
       + " LEFT JOIN genre AS g ON g.genre_id = gt.id_genre" 
       + " WHERE g.genre LIKE '%" + genre + "%'" 
       + " GROUP BY a.music_id, a.music_title", null); 
       cursor.moveToFirst(); 

      while (!cursor.isAfterLast()) { 
       music.setTitle(cursor.getString(0)); 
       musicList.add(music); 
       cursor.moveToNext(); 
      } 
      cursor.close(); 
     } 
     sqLiteDatabase.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     sqLiteDatabase.close(); 
    } 
     return musicList; 
    } 

내 쿼리 방법 내가 선택한 문자열 목록을 가져 오는 코드.

List<String> genre= (List<String>)bundle.getSerializable("selectedGenre"); 

     assert genre!= null; 
     String a = ""; 
     for (Genre g: genre) { 
      a = a + g.getGenre() + "\n"; 
     } 

LIKE 절 유효한 쿼리는 다음과 같이한다

List<String> genre = "rnb, pop, reggae"; 
+0

무엇이 문제입니까? –

+0

@ mr.icetea는 검색어가있는 행 결과를 얻을 수 없습니다. –

+0

"LIKE"% + 장르 + % " '"''LIKE'% '+ 장르 + "%'" '로 변경해보십시오. –

답변

0

목록 값에서 쿼리

SELECT * FROM music WHERE genre LIKE '%genre%' 

변경,

"SELECT * FROM "+ TABLE_MUSIC + " WHERE " + KEY_GENRE + " LIKE '"%+ genre+%"'" 

하는 것입니다

"SELECT * FROM "+ TABLE_MUSIC + " WHERE " + KEY_GENRE + " LIKE '%" + genre+ "%'"