2016-04-22 5 views
4

Ich bin ein Neuling in Android-Programmierung und auf der Suche nach Hilfe bei meiner Abfrage. Ich versuche, alle Geräte zu finden, wo die id eine ausgewählte Mannschaft der Heimmannschaft gleich team_1_id oder auswärtig team_2_idVerwenden von OR-Operator mit 2 Platzhaltern mit dem gleichen Wert

ich die folgende Abfrage habe, ist es nur die Ergebnisse zurückkehrt, wo die id ist team_1_id und nicht team_2_id

public List <Fixture> getTeamFixtures(int id) { 
List <Fixture> fixtureList = new ArrayList <Fixture>(); 

// Select All Query 
String selectQuery = " 
SELECT fixtures.id, 
     fixtures.team_1_id, 
     fixtures.team_2_id, 
     fixtures.date, 
     fixtures.time, 
     fixtures.pitch, 
     teams.team_name, 
     teams_1.team_name AS awayTeam, 
     leagues.league_name, 
     leagues.id 
FROM fixtures 
     INNER JOIN teams 
       ON fixtures.team_1_id = teams.id 
     INNER JOIN teams AS teams_1 
       ON fixtures.team_2_id = teams_1.id 
     INNER JOIN teams_vs_leagues 
       ON teams.id = teams_vs_leagues.team_id 
     INNER JOIN leagues 
       ON teams_vs_leagues.league_id = leagues.id 
WHERE fixtures.team_1_id = ? 
     OR fixtures.team_2_id = ? 
"; 

SQLiteDatabase db = this.getWritableDatabase(); 
Cursor cursor = db.rawQuery(selectQuery, new String[] { 
    String.valueOf(id) 
}); 
// looping through all rows and adding to list 
if (cursor.moveToFirst()) { 
    do { 
    Fixture fixture = new Fixture(); 
    fixture.setId(Integer.parseInt(cursor.getString(0))); 
    fixture.setTeamId1(Integer.parseInt(cursor.getString(1))); 
    fixture.setTeamId2(Integer.parseInt(cursor.getString(2))); 
    fixture.setDate(cursor.getString(3)); 
    fixture.setTime(cursor.getString(4)); 
    fixture.setPitch(cursor.getString(5)); 
    fixture.setTeamName1(cursor.getString(6)); 
    fixture.setTeamName2(cursor.getString(7)); 
    fixture.setLeagueName(cursor.getString(8)); 
    fixture.setLeagueId(Integer.parseInt(cursor.getString(9))); 
    // Adding team to list 
    fixtureList.add(fixture); 
    } while (cursor.moveToNext()); 
} 
// close inserting data from database 
db.close(); 
// return fixturelist 
return fixtureList; 

} 

Immer wenn ich versuche

WHERE fixtures.team_1_id = ? 

OR

WHERE fixtures.team_2_id = ? 

Die Abfrage gibt die entsprechenden Ergebnisse, aber ich möchte sehen können, ob die id erscheint in entweder team_1_id oder team_2_id

jede Hilfe dankbar groß sein würde.

+0

setzen Sie einfach Ihren Wert zweimal in die Parameterliste – njzk2

Antwort

3

Als documented, können Sie einen Parameter verwenden, indem es eine explizite Zahl geben:

... WHERE fixtures.team_1_id = ?1 OR fixtures.team_2_id = ?1 ... 

oder von ihm einen Namen:

... WHERE fixtures.team_1_id = :TeamID OR fixtures.team_2_id = :TeamID ... 
+0

Vielen Dank. Ich hatte keine Ahnung, wie man einen Parameter wiederverwendete. Das hat wirklich geholfen, danke nochmal. –

1

können Sie in verwenden:

WHERE ? in (fixtures.team_1_id, fixtures.team_2_id) 
+0

Ich hatte diese Methode versucht, aber es ist Sti Ich gebe keine Ergebnisse zurück. –

+0

also nehmen Sie die Where-Klausel heraus und sehen Sie, was zurückgegeben wird. –

+0

Ich brauche den Wert des Platzhalters, um in der ArrayList zu übergeben, die ich verwende. Obwohl ich dieselbe Abfrage in einer anderen Methode abzüglich der WHERE-Klausel verwende, gibt sie alle Fixtures zurück. –

Verwandte Themen