sqlite abfrage

Dein Thema passt einfach in kein Forum? Dann probiers mal hier.
Antworten
acdc
Beiträge: 82
Registriert: 23. Oktober 2007 18:56

sqlite abfrage

Beitrag von acdc »

Hallo,

ich benutze in meinem QT-Programm sqlite und wollte wissen ob es eine Abfrage gibt, welche mir den indes eines Datensatzes zurück gibt. also zum Beispiel suche ich nach einem String und will nur wissen ob das jetzt die 1. oder 3. ... Zeile in der Tabelle ist.
Hat jemand einen Vorschlag?

Danke
acdc
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

im Query die ROWID mit abfragen

Code: Alles auswählen

SELECT $(meine_attribut_liste) ROWID FROM <...>
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

im Query die ROWID mit abfragen
die ROWID muss nicht fortlaufend sein !
wenn du zeilen loeschst, kann die lücken bekommen.
If a table contains a column of type INTEGER PRIMARY KEY, then that column becomes an alias for the ROWID.
Also spaetestens wenn nen INT PK anlegst, hasst die ROWID vollstaendig unter eigener controlle ... d.h. du kannst die IDS selber bestimmen, nix mehr mit autoincrement !

@acdc
Prinzipiell ist in deinem Design irgendwas "faul" wenn du zu brauchen gedenkst !
Hast du in deinen Daten positionelle Infos, solltest du das auch so modellieren und auch die Intigrität wahren. Ergo ne Posi Spalte pflegen !

Oder brauchst du das nur intern fuern zugriff ? dann deinen Aufbau ueberdenken .... du bekommst doch ein ergebniss-set (RecordSet) von deiner Abfrage ! Das musst doch durchlaufen, damit hasst ja impliziet nen Index .

Also fuer was brauchst Du das ?

Ciao ....
acdc
Beiträge: 82
Registriert: 23. Oktober 2007 18:56

Beitrag von acdc »

@RHBaum

Das mit der RowId ist richtig, ich hab auch einen Primärschlüssel und wenn ich Records lösche, so entstehen Lücken.

Habe es daher so gelöst:

"SELECT COUNT(*) FROM kundendaten WHERE id <= aktuelleID"
Ich zähle einfach die Datensätze, die kleiner bzw. gleich sind und so kenne ich die Position.

Das Ganze benötige ich einfach um anzuzeigen, dass zum Beispiel gerade der 4. Datensatz angezeigt wird. So wie "3 von 40".

Danke für die schnellen Rückmeldungen!

acdc
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

dass zum Beispiel gerade der 4. Datensatz angezeigt wird. So wie "3 von 40".
das mit der count iss dann aber von hinten durch die Brust ....

Deine Abfrage, mit was executest du die ?

Benutzt du QSQLQuery, solltest du mit size() z.b. die Anzahl der Zeilen bekommen, die deine Abfrage liefert ...

Bei ziemlich komplexen Abfragen kann dir das aber auch die Performance zerreissen ...
Wenn du nen richtiges RDBMS verwendest, sollten dir die SQL treiber schon die ersten zeilen liefern, waehrend der Server im hintergrund noch fleissig am roedeln ist.
Mit ner aggregatsfunktion muss er zumindest fuer das aggregat die benoetigte subabfrage komplett umsetzen. Wenn das "where" im Statement kompliziert ist, und deine Tabellen ziemlich gross, kann das ewig dauern, waerend ein "select * from ... where" mit der selben where bedingung Dir scho recht schnell die ersten zeilen liefern könnte.
Nen size wird dann entweder ned untertsuetzt, oder es dauert bis die komplette Abfrage durch iss (also ewig).

Das aber nur als Hinweiss, das dir so nen simples X von Y teuer werden könnte !

Verwendest du ein QSQLQueryModel ? Dann koenntest du das Model direkt fragen, wieviel Eintraege es denn scho hat ...

Ciao ...
Antworten