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";
무엇이 문제입니까? –
@ mr.icetea는 검색어가있는 행 결과를 얻을 수 없습니다. –
"LIKE"% + 장르 + % " '"''LIKE'% '+ 장르 + "%'" '로 변경해보십시오. –