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.
KoSSo
Mitglied
Beiträge: 170
Registriert: 21.11.2002 22:24

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

Beitrag von KoSSo »

Hi,
ich habe meinem phpBB eine kleine Buch Datenbank hinzugefügt diese Datenbank konnen die Benutzer über ein formular durchsuchen das Query für die Ausgabe der ergebnisse sieht so aus:

Code: Alles auswählen

$sql = "SELECT buch_titel, buch_preis, buch_kommentare
FROM phpbb_books
WHERE `$table_row` LIKE '%$search_keywords%'";
$table_row enthält die tabellenspalte in der gesucht werden soll und $search_keywords die stichwörter nach denen gesucht werden soll! Nun meine frage: Wie kann ich es den Usern ermöglichen das sie wie bei der phpBB-Suche AND/OR/NOT benutzen können?

Ich habe schon probiert vor dem Query das einzufügen:

Code: Alles auswählen

$split_search = array();
$split_search = split(' ', $search_keywords);
$current_match_type = 'or';

for($i = 0; $i < count($split_search); $i++)
			{
				switch ( $split_search[$i] )
				{
					case 'and':
						$current_match_type = 'and';
						break;

					case 'or':
						$current_match_type = 'or';
						break;

					case 'not':
						$current_match_type = 'not';
						break;

					default:
                  $current_match_type = 'and';
						break;
                                 }
}

$search_keywords = str_replace('*', '%', $split_search[$i]);
aber das funktioniert leider nicht :(

Ich wäre dankbar wenn mir da jemand weiterhelfen könnte :)

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

Beitrag von Pyramide »

Du kannst dir ja mal meine SearchToSQL-Funktion angucken: http://www.phpbb.de/viewtopic.php?p=172565#172565
KoSSo
Mitglied
Beiträge: 170
Registriert: 21.11.2002 22:24

Beitrag von KoSSo »

Danke aber so ganz verstehe ich nicht wie man das benutzt müsste ich das dann einfach nur so abändern und dann können die User AND/OR/NOT verwenden?:

Code: Alles auswählen

$sql = "SELECT buch_titel, buch_preis, buch_kommentare 
FROM phpbb_books 
WHERE " . SearchToSQL($search_keywords, array($table_row)) . ";
Grüße KoSSo
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Ja (das . " am Ende solltest du allerdings entfernen...)
Benutzeravatar
itst
Ehrenadmin
Beiträge: 7418
Registriert: 21.08.2001 02:00
Wohnort: Büttelborn bei Darmstadt
Kontaktdaten:

Beitrag von itst »

Sascha A. Carlin,
phpBB.de Ehrenadministrator
:o
KoSSo
Mitglied
Beiträge: 170
Registriert: 21.11.2002 22:24

Beitrag von KoSSo »

Hi,
und danke euch beiden :)

@Pyramide funktioniert wunderbar :) Aber eine frage noch, hier:

Code: Alles auswählen

//settings
	$like_exact_combine='OR';
	$like_fields_combine='OR';
	$exact_fields_combine='OR';
wird doch festgelegt das als standard suchmuster 'oder' verwendet wird also wenn ich z.b. kunst schule als suchwort habe sucht er nach Kunst OR schule wenn ich es nun so wie bei der phpBB Suche haben möchte das er dann als standard nach kunst AND schule sucht muss ich dann bei allen drei variablen das OR durch AND ersetzen?

Grüße KoSSo

BTW: Gibt es eigentlich auch eine möglichkeit das in 2 tabellenspalten gesucht wird z.b. statt in buch_titel oder buch_beschreibung in beiden?
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

KoSSo hat geschrieben:BTW: Gibt es eigentlich auch eine möglichkeit das in 2 tabellenspalten gesucht wird z.b. statt in buch_titel oder buch_beschreibung in beiden?
Ja, einfach bei Parameter 2/3 mehr Elemente in das Array setzen. also z.B: SearchToSQL($search_keywords, array('feld1', 'feld2')). Und für diesen Fall sind auch die drei Variablen:
  • like_exact_combine bestimmt, wie der Suchstring der 'exact' Felder mit dem der 'like' Felder verbunden werden
  • like_fields_combine bestimmt, wie die Suchstrings der einzelnen 'like' Felder miteinander verbunden werden
  • exact_fields_combine bestimmt, wie die Suchstrings der einzelnen 'exact' Felder miteinander verbunden werden.
Wenn du z.B. like_fields_combine auf AND setzt, müssen die Suchbegriffe sowohl im Titel als auch in der Beschreibung vorkommen.

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)
KoSSo
Mitglied
Beiträge: 170
Registriert: 21.11.2002 22:24

Beitrag von KoSSo »

Pyramide hat geschrieben:Ja, einfach bei Parameter 2/3 mehr Elemente in das Array setzen. also z.B: SearchToSQL($search_keywords, array('feld1', 'feld2')).
Hi,
danke aber das funktioniert leider nicht ich bekomme ne fehlermeldung. So sieht die WHERE Klausel aus der sql abfrage aus die vom debugger unter der fehlermeldung ausgegeben wird:

Code: Alles auswählen

WHERE ((Array LIKE '%test%'))
Grüße KoSSo
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Wie sieht denn dein Code jetzt aus?
KoSSo
Mitglied
Beiträge: 170
Registriert: 21.11.2002 22:24

Beitrag von KoSSo »

Wie vorher nur das $table_row jetzt so aussieht:

Code: Alles auswählen

$table_row = "'buch_titel','buch_beschreibung'";
statt so:

Code: Alles auswählen

$table_row = 'buch_beschreibung';
Ich muss es ja über diese variable machen da das ganze per formular übergeben wird ;)

Grüße KoSSo
Antworten

Zurück zu „Coding & Technik“