Seite 2 von 3

Verfasst: 07.08.2003 18:01
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)

Verfasst: 07.08.2003 21:24
von KoSSo
Vielen Dank jetzt hab selbst ich es verstanden ;) Nun läuft es so wie ich mir das vorgestellt habe :)

Grüße KoSSo

Verfasst: 21.08.2003 13:46
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

Verfasst: 21.08.2003 17:50
von Pyramide
Da dieses Feature scheinbar viele gebrauchen können, kann ich das ja mal als Option einbauen, wenn ich die Zeit dazu finde.

Verfasst: 21.08.2003 17:57
von O´Riley
Jau das wäre echt cool :)

Grüße O´Riley

Verfasst: 24.08.2003 23:22
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

Verfasst: 25.08.2003 01:13
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.

Verfasst: 25.08.2003 14:50
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

Verfasst: 25.08.2003 16:54
von Pyramide

Code: Alles auswählen

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

Verfasst: 25.08.2003 17:52
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