Announcement

Collapse
No announcement yet.

sqlite3 filtern einer Tabelle

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • sqlite3 filtern einer Tabelle

    Hi,

    ich habe eine Datenbankdatei mit mit ca. 800 Datensätzen. Sie enthalten eine ID und die x,y,z Koordinaten. Mit dem folgenden Code habe ich sie schon mal sortiert, nach den zugehören IDs und schrebie es in eine Liste rein.

    Code:
    sqlite3_open( "C:\\OMNeT_Datenbank14.db" ,&datenbank);
    
    
    if (SQLITE_OK != sqlite3_prepare_v2(datenbank, "SELECT * FROM omnet WHERE HostID ORDER BY 1", -1, &stmt, 0))
            {
            //Ausgabe von Fehler (z.B. bei Syntaxfehlern)
            printf("Fehler beim Vorbereiten der SQL Anfrage: %s", sqlite3_errmsg(datenbank));
            }
        else {
            sqlite3_prepare_v2(datenbank, "SELECT COUNT(*) FROM omnet", -1, &stmt2, 0);
            sqlite3_step(stmt2);
    
    
    
            //Solange Datensätze zurückgegeben werden
            printf("Datensaetze: %d\n", sqlite3_column_int(stmt2, 0));
            while (SQLITE_ROW == sqlite3_step(stmt))
                {
    
                    //Werte aus Spalten 1, 2 und 3 ausgeben (Index startet bei 0)
                    printf("%s %s %s %s\n", sqlite3_column_text(stmt, 0),
                                            sqlite3_column_text(stmt, 1),
                                            sqlite3_column_text(stmt, 2),
                                            sqlite3_column_text(stmt, 3));
    
                    Point3f* pkt = new Point3f();
                    pkt->X = sqlite3_column_double(stmt, 1);
                    pkt->Y = sqlite3_column_double(stmt, 2);
                    pkt->Z = sqlite3_column_double(stmt, 3);
                    punktliste.push_back(pkt);
    
    }
            }
    
        //Statement löschen
        sqlite3_finalize(stmt);
        sqlite3_finalize(stmt2);

    Da ich für jede ID in OpenGL eine Kugel erzeugen möchte die die Positionsdaten abfährt, wollte ich wissen, wie man das am besten machen kann.
    Ich kann natürlich wenn ich die ID kenne mit WHERE HostID is '2' filtern aber wenn ich das Programm, welches in DB reinschreibt, starte kann es sein das es die ID nicht gibt oder es meht Ids gibt als die ich abfrage. Und ich möchte es ja auch ohne die ID nachzuscheuen filtern können und das für jeden beliebigen Host.
    Bsp:
    Code:
    DB sieht folgendermaßen aus:
    
    2 156.0 97.0 156.0
    2 156.071 96.9954 156.071
    2 156.141 96.9909 156.141
    4 493.75 212.202 190.745
    4 493.848 212.212 190.726
    4 493.946 212.222 190.707
    7 192.696 55.9556 192.696
    7 192.636 56.0071 192.636
    7 192.575 56.0585 192.575
    Jetzt will ich in OpenGl wenn die Daten geparst wurden für die IDs 2,4 und 7 eine Kugel erstellen und dies die zugehörige Position abfahren lassen,
    Ich muss die IDs ja irgendwie trennen.
    Hat da jemand ein Idee oder ist es nicht möglich?


    Danke und Grüße!

  • #2
    Hi,

    zunächst mal ist das (ich nehme an, dass Du alle Datensätze nach HostID sortiert abrufen willst):
    Code:
    SELECT * FROM omnet WHERE HostID ORDER BY 1
    meines Erachtens keine gültige SQL-Anweisung. Ich kenne zwar sqlite nicht (vielleicht ein SQL-Dialekt?), aber standardmäßig sollte das Statement so aussehen:
    Code:
    SELECT * FROM omnet ORDER BY HostID
    Du brauchst keinen WHERE-Abschnitt, weil Du ja nix eingrenzt.

    Vielleicht mal so probieren:
    Code:
    ... nur die HostIDs abrufen
    select distinct HostID from omnet order by HostID
    ... dann Ergebnismenge durchgehen und bei jedem Datensatz:
    select * from omnet where HostId = (ergebnismenge.feld0)
    ... diese Datensätze durchgehen und mit den Werten was anfangen
    Mir ist noch nicht ganz klar, wo Dein Problem liegt.

    Gruß Knut

    Comment

    Working...
    X