SQLite Suche mit Paltzhalter

Anfängerfragen zum Programmieren mit PureBasic.
gnaps
Beiträge: 151
Registriert: 02.09.2008 13:02

SQLite Suche mit Paltzhalter

Beitrag von gnaps »

Hallo Leute,

ich habe eine SQLite Datenbank mit dem Feld Namen.
In der Datenbank im Feld Name steht z.B. 001_Organisataion und 002_Büro

Jetzt möchte ich über die Eingabe über ein Stringgadget die Datenbank durchsuchen.

Wenn ich jetzt 001 eingebe dann suche ich mit like %001% das funtioniert.

Wenn ich jetzt in das Suchfeld 001 und 002 eingebe, soll dieser Datensatz auch gefunden werden.
Gibt es hier einen bestimmten SQLite Platzhalter.

gruß
gnaps
PureBasic Vollversion V 5.71 für Windows - Windows 10 (64)
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: SQLite Suche mit Paltzhalter

Beitrag von RSBasic »

Enfach in deiner WHERE-Bedingung mit OR arbeiten. Beispielhaft:

Code: Alles auswählen

SELECT * FROM DeineTabelle WHERE Spalte1 LIKE '%001%' OR Spalte2 LIKE '%002%'
Oder meinst du was anderes?
Oder meinst du:

Code: Alles auswählen

SELECT * FROM DeineTabelle WHERE Spalte LIKE '00_'
:?:
(_ = Platzhalter für ein Zeichen)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
gnaps
Beiträge: 151
Registriert: 02.09.2008 13:02

Re: SQLite Suche mit Paltzhalter

Beitrag von gnaps »

Hi,

meine Tabelle als Beispiel

ID;Name;Gewerk
1;001_Organisataion 002_Büro;008_Rohbau 009 Tiefbau
2;002_Büro;008_Rohbau

jetzt möchte ich in Name 001 und 002 suchen
es soll dann nur der erste Datensatz gefunden werden

oder mit Org und Bü
dann soll auch nur der erste Datensatz gefunden werden

Ich hoffe ich habe mich jetzt genauer formuliert.
PureBasic Vollversion V 5.71 für Windows - Windows 10 (64)
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: SQLite Suche mit Paltzhalter

Beitrag von RSBasic »

Code: Alles auswählen

SELECT * FROM DeineTabelle WHERE Name LIKE '%001%' OR Name LIKE '%002%'
Oder nur der erste Eintrag:

Code: Alles auswählen

SELECT TOP 1 * FROM DeineTabelle WHERE Name LIKE '%001%' OR Name LIKE '%002%'
In deinem Fall wären aber zwei Tabellen mit einer Beziehung besser.
Tabelle1: ID;Name
- 1;001_Organisataion
- 2;002_Büro

Tabelle2: ID;Gewerk;FK_ID
- 1;008_Rohbau;1
- 2;008_Rohbau;2
- 3;009_Tiefbau;1

Oder noch besser mit drei Tabellen:
Tabelle1: ID;Name
- 1;001_Organisataion
- 2;002_Büro

Tabelle2: ID;Gewerk
- 1;008_Rohbau
- 2;009_Tiefbau

Tabelle3: ID;FK_ID1;FK_ID2
- 1;1;1
- 2;1;2
[...]

Vorteil: Du hast dann keine redundante Daten.

(FK = Foreign Key = Fremdschlüssel-Beziehung auf die andere Tabelle)
Den SQL-Code erweiterst du beispielsweise mit INNER JOIN. Je nachdem, was du brauchst. Hier eine Übersicht, welche Variante für dich am besten ist, um deine Ergebnisse auszulesen: https://www.codeproject.com/KB/database ... S_orig.jpg
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
gnaps
Beiträge: 151
Registriert: 02.09.2008 13:02

Re: SQLite Suche mit Paltzhalter

Beitrag von gnaps »

Hi

Code: Alles auswählen

SELECT * FROM DeineTabelle WHERE Name LIKE '%001%' OR Name LIKE '%002%'
das ist schon klar aber ich gebe in meinem Such-Stringgadget ja "001 002" ein

ich möchte dann eigentlich

Code: Alles auswählen

SELECT * FROM DeineTabelle WHERE Name LIKE '%001%' and Name LIKE '%002%'
haben

Jetzt könnte ich ja mit einem Platzhalter z.B "*" arbeiten, jedoch müsste ich dann den
String auf die Anzahl der "*" prüfen und dann den string zerpflücken
um dann meine SQLAnweisung einzeln zusammenbauen.

Das ist ja sehr aufwendig.

Desshalb die Frage ob ich den Suchstring nicht direkt über eine SQL abfragen kann.
PureBasic Vollversion V 5.71 für Windows - Windows 10 (64)
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: SQLite Suche mit Paltzhalter

Beitrag von RSBasic »

Wenn man im Programm 001 002 eingibt, dann kannst du z.B. mit StringField() beide Suchwörter trennen und du erstellst in einer Schleife deine WHERE-Bedingung mit OR.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Re: SQLite Suche mit Paltzhalter

Beitrag von The_Dark_Zim-.- »

Es sollte doch auch funktionieren, wenn man folgendes schreibt:

Code: Alles auswählen

SELECT * FROM DeineTabelle WHERE Name LIKE '%001%002%'
Dabei ist jedoch die Reihenfolge von Bedeutung! Sprich ein Datensatz mit 'Test Datensatz 002 mit 001 am ende' würde nicht im Ergebnis auftauchen.

Statt dir eine Syntax aus zu denken, an die man sich dann halten muss, würde ich einfach mehrere Eingabefelder schaffen. Vllt. etwas wo man nach bedarf auch mehr Eingabefelder schaffen kann.

Grobes Beispiel:
1. Combobox mit den durchsuchbaren Spalten. 2. Combobox mit der Suchweise (Beginnt mit, ist gleich, enthält) und dann 3. Ein Eingabefeld, wo das zu suchenden eingegeben wird.
[Combobox] [Combobox] [Eingabefeld]

Das ergibt dann quasi die SQL Syntax. Where [Inhalt 1. Combobox] [Inhalt 2. Combobox] [Inhalt Eingabefeld] (and/or) weitere Eingaben.
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
gnaps
Beiträge: 151
Registriert: 02.09.2008 13:02

Re: SQLite Suche mit Paltzhalter

Beitrag von gnaps »

Hi Leute,

ich habs

Ich nehme einen Platzhalter z.B (*)

In meinem Such-Stringadget gebe ich ein

001*002
oder
001 *002
oder
001* 002
oder
001 * 002

jetzt das ganze in eine Variable

Code: Alles auswählen

SuchText.s=GetGadgetText(#str_GewerkSuche)
dann suche ich den Platzhalter und lösche die Leerzeichen falls welche da sind

Code: Alles auswählen

If FindString(SuchText.s," *")
 SuchText.s=ReplaceString(SuchText.s," *","*")
EndIf

If FindString(SuchText.s,"* ")
  SuchText.s=ReplaceString(SuchText.s,"* ","*")
EndIf  
jetzt habe ich in SuchText.s= 001*002

jetzt meine Grund SQL-Anweisung

Code: Alles auswählen

sqlanweisung.s="Select * from Tabelle where ID='Suchadresse'"
Jetzt ersetze ich in SuchText.s "*" mit meiner SQLAnweisung

Code: Alles auswählen

If FindString(SuchText.s,"*")
 SuchText.s=ReplaceString(SuchText.s,"*","%' and Name LIKE '%")
EndIf
und füge SuchText.s an meine SQLAnweisung an

Code: Alles auswählen

SQLAnweisung.s+" and Name LIKE '%"+SuchText.s+"%'"
Jetzt habe ich meine fertig SQLAnweisung.

Code: Alles auswählen

Select * from Tabelle where ID='4' and Name LIKE '%001%' and Name LIKE '%002%'
Passt

das gute daran ist, ich kann so viel Platzhalter einfügen wie ich will

Dennoch Danke an alle
PureBasic Vollversion V 5.71 für Windows - Windows 10 (64)
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: SQLite Suche mit Paltzhalter

Beitrag von RSBasic »

Genau so eine Art habe ich ja oben auch vorgeschlagen, nur halt mit StringField(), dass du deine WHERE-Bedingung in PB je nach Anzahl der Suchbegriffe erweiterst.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: SQLite Suche mit Paltzhalter

Beitrag von Sicro »

gnaps hat geschrieben:Jetzt habe ich meine fertig SQLAnweisung.

Code: Alles auswählen

Select * from Tabelle where ID='4' and Name LIKE '%001%' and Name LIKE '%002%'
Ähm... nicht eher so:

Code: Alles auswählen

SELECT * FROM Tabelle WHERE ID='4' AND (Name LIKE '%001%' OR Name LIKE '%002%')
:?:

"Name" kann ja nicht gleichzeitig "%001%" und "%002%" entsprechen.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Antworten