phpBB: In suche bei Buch Datenbank benutzung von AND/OR/NOT?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Der zweite und/oder dritte Parameter müssen arrays sein. Einfach ein String mit zwei Feldern reicht nicht. (mich wundert allerdings, daß im SQL später 'Array' ausgegeben wird, obwohl du keins als Parameter übergibst).

Zum besseren Verständnis hier mal ein paar Beispiele ($search = 'irgend + was'):

Code: Alles auswählen

SearchToSQL($search, array('titel', 'beschreibung'));
wird zu

Code: Alles auswählen

((titel LIKE '%irgend%' AND titel LIKE '%was%') OR (beschreibung LIKE '%irgend%' AND beschreibung LIKE '%was%'))
(Die Suchbegriffe müssen in Titel oder Beschreibung enthalten sein)

Code: Alles auswählen

SearchToSQL($search, 'd.titel', 'k.keyword')
wird zu

Code: Alles auswählen

((d.titel LIKE '%irgend%' AND d.titel LIKE '%was%')) OR ((k.keyword = 'irgend' OR k.keyword = 'was'))
(Die Suchbegriffe müssen entweder im Titel enthalten sein oder exakt einem der Schlüsselwörter entsprechen)

Code: Alles auswählen

SearchToSQL($search, array('d.titel', 'd.beschreibung'), array('d.autor', 'k.keyword'), array('like_fields_combine' => 'AND'))
wird zu

Code: Alles auswählen

((d.titel LIKE '%irgend%' AND d.titel LIKE '%was%') AND (d.beschreibung LIKE '%irgend%' AND d.beschreibung LIKE '%was%')) OR ((d.autor = 'irgend' OR d.autor = 'was') OR (k.keyword = 'irgend' OR k.keyword = 'was'))
(Die Suchbegriffe müssen in Titel und Beschreibung enthalten sein oder exakt Autor oder Schlüsselwörtern entsprechen)
KoSSo
Mitglied
Beiträge: 170
Registriert: 21.11.2002 22:24

Beitrag von KoSSo »

Vielen Dank jetzt hab selbst ich es verstanden ;) Nun läuft es so wie ich mir das vorgestellt habe :)

Grüße KoSSo
O´Riley

Beitrag von O´Riley »

Hi,
ich würde auch gerne die suchfunktionen von Pyramide für meine Tutorial Datenbank benutzen und dazu die standardoperation auf AND setzen aber ich weiss nicht genau wie, das oben gepostete kapier ich irgendwie nicht:
Wenn du die Suchstring-interne Standardoperation auf AND setzen willst, wird das schon etwas komplizierter. Du kannst zwar unter //state, wo die Variablen initialisiert werden, $is_and = false durch $is_and = true ersetzen; allerdings kannst du dann kein OR mehr verwenden, da OR als Standardoperation kein Zeichen (wie + für AND) hat und deshalb in TrimAndOr() komplett entfernt wird. Du könnst dir allerdings ein Zeichen ausdenken und dann den case '+'-Block kopieren (mit $is_and = false)
Könnte mir das jemand genauer erklären wie ich das hinkriegen kann das standardmässig nach AND gesucht wird?

Gruß O´Riley
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Da dieses Feature scheinbar viele gebrauchen können, kann ich das ja mal als Option einbauen, wenn ich die Zeit dazu finde.
O´Riley

Beitrag von O´Riley »

Jau das wäre echt cool :)

Grüße O´Riley
McNamara

Beitrag von McNamara »

Hi,
ich würde dein script auch gerne in meiner Datenbanksuche benutzen hab aber ne frage dazu ist es möglich in mehreren tabellen nach mehreren Wörtern zu suchen z.b. in der tabellenspalte `beschreibung` nach 'bild' und gleichzeitig in der tabellenspalt `titel` nach 'picasso' ?

Ich stell mir das so vor:

Code: Alles auswählen

SearchToSQL(array('bild','picasso'), array('beschreibung','titel'))
Ist das möglich?

Grüße McNamara
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Dafür gibts die Funktion MultiSearchToSQL, die SearchToSQL mehrfch aufruft:

Code: Alles auswählen

$sql .= MultiSearchToSQL(array(
    'bild' => 'picasso',
    'beschreibung' => 'titel'
));
Optionaler zweiter Parameter ist wie die Strings verbunden werden (also 'AND' oder 'OR'); wenn der Array-Schlüssel 'exact:feldname' lautet, wird er als exact-Feld übergeben, sonst als like-Feld.
McNamara

Beitrag von McNamara »

Hi,
und wie benutze ich das ganze dann in nem Query?

So wie SearchToSQL?

Code: Alles auswählen

$sql = "SELECT id
        FROM " . SDB_TABLE . "
        WHERE MultiSearchToSQL(array('bild' => 'picasso','beschreibung' => 'titel'))";
McNamara
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Code: Alles auswählen

$sql = "SELECT id
        FROM " . SDB_TABLE . "
        WHERE " . MultiSearchToSQL(array('bild' => 'picasso','beschreibung' => 'titel'));
McNamara

Beitrag von McNamara »

Ahh cool danke funzt supi eine frage noch es wird ja standardmässig nach AND gesucht um standardmässig nach OR zu suchen muss ich in der funktion einfach diesen teil:

Code: Alles auswählen

function MultiSearchToSQL($strings, $combine='AND')
damit ersetzen:

Code: Alles auswählen

function MultiSearchToSQL($strings, $combine='OR')
oder muss ich sonst noch was ändern?

Grüße McNamara
Antworten

Zurück zu „Coding & Technik“