| 

.NET C# Java Javascript Exception

3
Hallo,
nun wende ich mich an Euch, nachdem ich jetzt nicht
mehr weiter komme. Ich fülle aus einer SQLITE-Datenbank
ein ExpandableListview per Abfrage aus zwei Tabellen mit nachfolgendem Code:
die Tabelle mKatalog besteht aus:
_id     |   Cat
1 Sommer
2 Winter
3 Herbst

Die Tabelle marb besteht aus
_ID | idx | und mehreren Spalten,
in die Spalteidx trage ich die _id von mkatalog ein;
sie dient als Gruppierungsspalte,also:
_ID  | idx | Tätigkeit
1 | 2 | Ski fahren
2 | 2 | Urlaub machen
3 | 1 | Baden
4 | 3 | Laub entfernen
5 | 3 | Resturlaub
6 | 2 | Mittelmeer fahren
usw.

Die beiden Abfragen liefern den ganzen Datenbestand und funktionieren einwandfrei
public Cursor getKategorie_Data() {
String sqlQuery =
"SELECT * FROM mkategorie";
return mDb.rawQuery(sqlQuery,null);


public Cursor getTaten_Data(long ZID) {
String sql=
"SELECT _id,idx " + ZID + " FROM ";
return mDb.rawQuery(sql,null);
}


Wenn ich aber mit dem nachfolgenden Code die Abfrage eingrenzen will bspw.auf den Ort
erhalte ich doppelte Rubriken, sprich Gruppierungen: Offenbar kriege ich offenbar
nicht dieselbe gleiche Datenmenge.
Meine Frage daher, wie muss ich die folgenden Abfragen formulieren.
public Cursor getKategorie_Data() {
String sqlQuery =
"SELECT * FROM " +
"marb a LEFT JOIN mkategorie k "+
"ON a.idx = k._id " +
"WHERE a.idx IN (SELECT _id FROM mkategorie) " +
"AND a.ort> ?";
return mDb.rawQuery(sqlQuery,new String[] {"ROM"+"%"});

public Cursor getTaten_Data(long ZID) {
String sql=
"SELECT _id,idx " + ZID + " FROM marb where ort> ?";
return mDb.rawQuery(sqlQuery,new String[] {"ROM"+"%"});
}


Ich hatte auch schon den Weg über Subquery versucht, leider ohne Erfolg.
Für eine Unterstützung wäre ich dankbar.
Lukos
News:
01.11.2014
Lukos 35 5
2 Antworten
1
Zunächst erst einmal prinzipiell:
Wenn die Einschränkung auf einen Ort geschehen soll, dann sollte man eine exakte Prüfung durchführen, nur in anderen Fällen ist eine LIKE-Abfrage geeignet.

Nun zu den Abfragen:
1. Kategoriedaten
SELECT DISTINCT _id, Cat FROM mKategorie k INNER JOIN marb a ON k._id = a.idx
WHERE a.ort = '<Ort>'
für genau einen Ort

oder
SELECT DISTINCT _id, Cat FROM mKategorie k INNER JOIN marb a ON k._id = a.idx
WHERE a.ort LIKE '<Ort>%'
für Orte, die mit der Eingabe beginnen. - oder gleitend a.ort LIKE '%<Ort>%'.

2. Detaildaten
SELECT _id, idx, <ZID> FROM marb WHERE ort = '<Ort>'
für genau einen Ort

oder
SELECT _id, idx, <ZID> FROM marb WHERE ort LIKE '<Ort>%'
für Orte, die mit der Eingabe beginnen. - oder gleitend a.ort LIKE '%<Ort>%'.

Die Symbole <ZID> und <Ort> durch entsprechende Parameter ersetzen, z.B. in entsprechenden Methoden.
Hoffe, es hilft weiter.
03.11.2014
edvservice 1,2k 6
0
Hallo zusammen,
die doppelten konnte ich durch die folgenden Abfragen beseitigen;
public Cursor getKategorie_Data() {
String sqlQuery =
"SELECT _id, cat FROM mkategorie WHERE _id IN (SELECT idx FROM marb WHERE ort = '"+"ROM"+"' )";
return mDb.rawQuery(sqlQuery,null);
}
public Cursor getTaten_Data(long ZID) {
String sql=
"SELECT _id, idx" + ZID + " FROM marb where WHERE ort = '"+"ROM"+"' ";
return mDb.rawQuery(sql,null);
}

Allerdings stehe ich jetzt vor einem weiteren Problem,
dass er mir sagt:
LogCat:
Failed to read row 1, column -1 from a CursorWindow which has 19 rows, 2 columns.

Ggfls. stelle ich eine neue Frage

Grüße
Lukos
02.11.2014
Lukos 35 5

Stelle deine Android-Frage jetzt!