SQLite Suche mit Paltzhalter
SQLite Suche mit Paltzhalter
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
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)
Re: SQLite Suche mit Paltzhalter
Enfach in deiner WHERE-Bedingung mit OR arbeiten. Beispielhaft:
Oder meinst du was anderes?
Oder meinst du:
(_ = Platzhalter für ein Zeichen)
Code: Alles auswählen
SELECT * FROM DeineTabelle WHERE Spalte1 LIKE '%001%' OR Spalte2 LIKE '%002%'
Oder meinst du:
Code: Alles auswählen
SELECT * FROM DeineTabelle WHERE Spalte LIKE '00_'
(_ = Platzhalter für ein Zeichen)
Re: SQLite Suche mit Paltzhalter
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.
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)
Re: SQLite Suche mit Paltzhalter
Code: Alles auswählen
SELECT * FROM DeineTabelle WHERE Name LIKE '%001%' OR Name LIKE '%002%'
Code: Alles auswählen
SELECT TOP 1 * FROM DeineTabelle WHERE Name LIKE '%001%' OR Name LIKE '%002%'
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
Re: SQLite Suche mit Paltzhalter
Hi
das ist schon klar aber ich gebe in meinem Such-Stringgadget ja "001 002" ein
ich möchte dann eigentlich
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.
Code: Alles auswählen
SELECT * FROM DeineTabelle WHERE Name LIKE '%001%' OR Name LIKE '%002%'
ich möchte dann eigentlich
Code: Alles auswählen
SELECT * FROM DeineTabelle WHERE Name LIKE '%001%' and Name LIKE '%002%'
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)
Re: SQLite Suche mit Paltzhalter
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.
- The_Dark_Zim-.-
- Beiträge: 372
- Registriert: 18.03.2008 16:53
Re: SQLite Suche mit Paltzhalter
Es sollte doch auch funktionieren, wenn man folgendes schreibt:
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.
Code: Alles auswählen
SELECT * FROM DeineTabelle WHERE Name LIKE '%001%002%'
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
Re: SQLite Suche mit Paltzhalter
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
dann suche ich den Platzhalter und lösche die Leerzeichen falls welche da sind
jetzt habe ich in SuchText.s= 001*002
jetzt meine Grund SQL-Anweisung
Jetzt ersetze ich in SuchText.s "*" mit meiner SQLAnweisung
und füge SuchText.s an meine SQLAnweisung an
Jetzt habe ich meine fertig SQLAnweisung.
Passt
das gute daran ist, ich kann so viel Platzhalter einfügen wie ich will
Dennoch Danke an alle
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)
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 meine Grund SQL-Anweisung
Code: Alles auswählen
sqlanweisung.s="Select * from Tabelle where ID='Suchadresse'"
Code: Alles auswählen
If FindString(SuchText.s,"*")
SuchText.s=ReplaceString(SuchText.s,"*","%' and Name LIKE '%")
EndIf
Code: Alles auswählen
SQLAnweisung.s+" and Name LIKE '%"+SuchText.s+"%'"
Code: Alles auswählen
Select * from Tabelle where ID='4' and Name LIKE '%001%' and Name LIKE '%002%'
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)
Re: SQLite Suche mit Paltzhalter
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.
Re: SQLite Suche mit Paltzhalter
Ähm... nicht eher so: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%'
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.
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