| MySQL Seiteninterne Suchmaschine - aber wie?
Phil
- php
0 Reiner0 Christian Seiler0 Reiner
0 Michael Schröpl0 Phil
Hi!
Ich habe bei mir z.Z. eine Suchmaschine laufen, die durchsucht eine bestimmte Spalte nach einem Begriff:
SELECT * FROM tabelle WHERE wort LIKE '$_POST[wort]'
Problem: Gibt man 2 Wörter ein, so kommt kein Ergebnis raus. Ist ja auch ganz klar.
aber wie umgehe ich das? Wie kann ich auch 2 Begriffe eingeben und trotzdem funktioniert die Suche...
am liebsten wär mir ein tutorial, wo das für DAUs erklärt wird...
Und bitte keine Links zu google oder hotscripts oder andere Seiten.
Ich habe gegooglet und ich will selbst schreiben, nicht runterladen und fertig...
Danke für die Hilfe nu schon
CU
http://www.yubb.de
Hi!
Ich habe bei mir z.Z. eine Suchmaschine laufen, die durchsucht eine bestimmte Spalte nach einem Begriff:
SELECT * FROM tabelle WHERE wort LIKE '$_POST[wort]'
Problem: Gibt man 2 Wörter ein, so kommt kein Ergebnis raus. Ist ja auch ganz klar.
aber wie umgehe ich das? Wie kann ich auch 2 Begriffe eingeben und trotzdem funktioniert die Suche...
am liebsten wär mir ein tutorial, wo das für DAUs erklärt wird...
Und bitte keine Links zu google oder hotscripts oder andere Seiten.
Ich habe gegooglet und ich will selbst schreiben, nicht runterladen und fertig...
SPLITte doch die Anfrage:
$suchtext = 'web internet';
@suchtext = split (/\ /,$suchtext);
jetzt baust Du mit foreach... einfach Deinen select zusammen.
$suche = "where 1";
foreach $i (@suchtext)
{
$suche = $suche . " and SUCHEFELD = '".$i."'";
}
und dann:
$sql = "select from IRGENDWAS" . $suche;
usw.
Hallo Phil,
am liebsten wär mir ein tutorial, wo das für DAUs erklärt wird...
Kannst Du haben:
http://www.mysql.com/doc/en/Fulltext_Search.html
Grüße,
Christian
Hallo,
am liebsten wär mir ein tutorial, wo das für DAUs erklärt wird...
Kannst Du haben:
das "MATCH (x,y) AGAINST ('$suche' IN BOOLEAN MODE)" kannte ich noch nicht.
Das wäre ja die Lösung. Aber leider erst ab MySQL Version 4.
Wäre mal zu überlegen, "aufzurüsten"....
Hi,
Problem: Gibt man 2 Wörter ein, so kommt kein Ergebnis
raus. Ist ja auch ganz klar.
mir nicht. Welche Semantik möchtest Du denn dieser Eingabe zugeordnet wissen? Entsprechend kannst Du Deine WHERE-Klausel generieren - da kann SQL relativ viel.
aber wie umgehe ich das? Wie kann ich auch 2
Begriffe eingeben und trotzdem funktioniert die
Suche...
Definiere "funktioniert".
Meinst Du ein AND, ein OR, eine Phrasensuche, ... ?
Viele Grüße
Michael
Hi!
Ob mit AND und OR, oder mit + und -, ob mit "...", alles recht egal, hauptsache, ich kann nach mehreren Begriffen suchen :)
CU
http://www.yubb.de
Hi,
Ob mit AND und OR, oder mit + und -, ob mit "...",
alles recht egal, hauptsache, ich kann nach mehreren
Begriffen suchen :)
nein! Das ist eben _nicht_ egal.
Wie willst Du denn entscheiden, ob die Suche funktioniert, wenn _Du_ nicht spezifiziert hast, was der Begriff "funktionieren" überhaupt bedeuten soll?
Es ist _Deine_ Entscheidung, ob die Eingabe von zwei Worten als AND, als OR, als Phrase oder als was auch immer zu verstehen sein _soll_ - und ob möglicherweise mehrere verschiedene Arten von Eingaben (mit entsprechenden Operatoren, um nur mal ein Beispiel zu nennen) mehrere der angegebenen Bedeutungen abdecken können soll. Aber jede Eingabe muß ein _definiertes_ Verhalten bewirken - genau diese Definition ist Dein Job, und zwar der wichtigste überhaupt beim gesamten Entwurf.
Erst _nachdem_ Du das festgelegt hast, kannst Du damit _anfangen_, eine entsprechende Lösung zu realisieren - also eine WHERE-Klausel, welche der Aufgabenstellung entspricht, aus der Eingabe dynamisch zu erzeugen.
Das ist dann gar nicht mehr arg schwer - aber ohne eine Aufgabenstellung wirst Du der Lösung _dieser_ Aufgabenstellung keinen Schritt näher kommen.
Viele Grüße
Michael
Hallo, Michael.
Ob mit AND und OR, oder mit + und -, ob mit "...",
alles recht egal, hauptsache, ich kann nach mehreren
Begriffen suchen :)
Erst _nachdem_ Du das festgelegt hast, kannst Du damit _anfangen_, eine entsprechende Lösung zu realisieren
IMHO denkt man nach einiger Zeit genug strukturiert, dass man bei kleinen Programmen (wie in diesem Fall) die Vorüberlegungen schon in einem Arbeitsgang mit dem Schreiben des Codes erledigt. Man hat meist schon automatisch ein Flussdiagramm im Kopf, man stellt sich die verschiedenen Eingaben und die Reaktionen des Programms darauf vor und dividiert dementsprechend die Teilbereiche des Programmes in Funktionen auseinander bzw. legt die Abläufe fest.
Ich habe vor einer Woche genau das realisiert, was Phil gerade plant. Mit dem Markup für das Eingabeformular, welches eine Suche nach zwei Kriterien zulässt (zusätzlich kann der Benutzer UND oder ODER wählen), dem Markup für die Ausgabe der Suchresultate und der Fehlerbehandlung aller Eventualitäten umfasst das Skript 148 Zeilen und ist nicht einmal sonderlich auf Effizienz optimiert.
Hättest du mir geraten, mir erst einmal großartig auszudenken und auf Papier zu notieren, was ich überhaupt vorhabe, bevor ich auch nur die erste Codezeile schreibe, hätte ich deinen Rat wohl nicht befolgt, da es mir zuviel Aufwand für ein solch kleines Programm ist, welches höchstens vierfach bedingt-verschachtelt ist. Ohne die Fehlerbehandlung würde das Formular, eine Schleife, welche die Query konstruiert, und eine Ausgabe ausreichend, ohne Markup sind das 40-50 Zeilen; und eigentlich ist der einzige "Clou" bzw. Kernpunkt des Programmes, eine entsprechende Datenbankabfrage zu generieren.
Vielleicht ist es einfach so, dass man bei einem vergleichsweise unkomplizierten Programm sofort in Anweisungen und Kontrollstrukturen denken kann.
Das ist dann gar nicht mehr arg schwer - aber ohne eine Aufgabenstellung wirst Du der Lösung _dieser_ Aufgabenstellung keinen Schritt näher kommen.
Genau, es ist nicht schwer.
Im Falle von Phil ist der Hinweis es gerechtfertigt (es weiß anscheind wirklich nicht, was er will bzw. denkt nicht in Kategorien der technischen Machbarkeit), es klingt nur ein wenig oberlehrerhaft, auch wenn du vollkommen recht hast. Wenn man das strukturierte Arbeiten einmal gelernt hat und vor allen Dingen weiß, *wie* man ein im Kopf ausgedachtes Programmschema in strukturiertem Code realisiert, kann man sich manche Vorüberlegungen sparen bzw. man erledigt sie automatisch, aber die einzelnen Arbeitsphasen sind dann nicht mehr einfach auseinanderdividierbar.
(Das gilt natürlich nicht, wenn man für andere lesbaren Code schreiben muss - dann zählen die Vorüberlegungen und der Code ist im Endeffekt mehr oder weniger irrelevant, es zählt nur der vom Code abstrahierte Programmablauf, wie du sagst, das ist das Wichtigste und Tatsächliche beim Entwerfen eines Programms - oder das Projekt umfangreicher wird und alles miteinander verzahnt ist.)
Die von dir genannte Vorgehensweise gehört m.E. zu den Grundlagen beim Erlernen von dem Erstellen von Programmen bzw. generell automatisierten Abläufen.
Ich wollte nur anmerken, dass man als Fortgeschrittener viele Arbeitsschritte kombiniert. Vorüberlegungen sind toll, aber damit ein Programm läuft, bedarf es so oder so einer Umsetzung. ;) Vor allem wenn diese Umsetzung keine Herausforderung darstellt, wie es hier der Fall ist, da der eigentliche Programmablauf klar wie Klößchenbrühe ist (ok, ok, "sein sollte" ;)), kann man sich m.E. in diesem Fall problemlos von der traditionellen Arbeitsweise loslösen.
Ich denke einmal, wenn man professionell Software schreibt, treffen meine Überlegungen nicht zu, aber hey, Phil will "nur" ein kleines Suchskript für seine Seite basteln, das muss nicht perfekt sein, auch wenn es ihm gut täte, exemplarisch daran zu lernen, wie man es bestenfalls macht, da er eines Tages möglicherweise dazu gezwungen wird, so zu arbeiten, da sollte ihm diese Vorgehensweise bekannt sein.
Jetzt habe ich mich sooft eingeschränkt, dass nichts mehr übrig bleibt, aber wie gesagt, ich hatte nicht die Absicht, dir zu widersprechen.
Mathias
Hi Mathias,
Erst _nachdem_ Du das festgelegt hast, kannst Du
damit _anfangen_, eine entsprechende Lösung zu
realisieren
IMHO denkt man nach einiger Zeit genug strukturiert,
dass man bei kleinen Programmen (wie in diesem Fall)
die Vorüberlegungen schon in einem Arbeitsgang mit
dem Schreiben des Codes erledigt.
Das glaube ich nicht. Dir wird die Spezifikation vielleicht nicht mehr als separater Schritt bewußt - aber sie muß abgeschlossen sein, bevor Du das Ergebnis der Spezifikation implementierst.
Man hat meist schon automatisch ein Flussdiagramm
im Kopf, man stellt sich die verschiedenen Eingaben
und die Reaktionen des Programms darauf vor
Letzteres _wäre_ diese Spezifikation. Genau die fehlte aber.
Mit dem Markup für das Eingabeformular, welches eine
Suche nach zwei Kriterien zulässt (zusätzlich kann
der Benutzer UND oder ODER wählen),
Genau. Du hast (implizit) spezifiziert, daß Du die
Beschreibung, wie die Terme zu interpretieren sind,
1. dem Benutzer überläßt und
2. dies in einem separaten GUI-Element durchführst,
also _nicht_ durch eine spezielle Syntax _innerhalb_ des Eingabefeldes für die Suchbegriffe.
Genau das ist die Design-Entscheidung, die _vor_ der Umsetzung in HTML-Code gefallen ist.
Hättest du mir geraten, mir erst einmal großartig
auszudenken und auf Papier zu notieren, was ich
überhaupt vorhabe, bevor ich auch nur die erste
Codezeile schreibe, hätte ich deinen Rat wohl nicht
befolgt, da es mir zuviel Aufwand für ein solch
kleines Programm ist,
Dem kann ich mich nicht anschließen.
Der vorherige Absatz _ist_ diese Spezifikation.
(Der Design-Prozeß dauert vielleicht eine Minute.)
Aber es ist einfach arbeitsmethodisch wichtig, sich der Abgängigkeit der einzelnen Schritte bewußt zu sein.
Vielleicht ist es einfach so, dass man bei einem
vergleichsweise unkomplizierten Programm sofort in
Anweisungen und Kontrollstrukturen denken kann.
Davor kann ich nur warnen.
Eine "einklagbare" Aufgabenstellung ist für jeden Implementierungsvorgang eine lohnende Investition.
Für ein Programm, das nur Du selbst verwenden willst, hast Du diese Aufgabenstellung im Kopf - aber jeder andere Anwender, der jammert, daß Dein Programm "nicht funktioniert", dem wirst Du Deine Aufgabenstellung unter die Nase halten können und sagen: "Es funktio-
niert innerhalb der definierten Parameter".
Im Falle von Phil ist der Hinweis es gerechtfertigt
(es weiß anscheind wirklich nicht, was er will bzw.
denkt nicht in Kategorien der technischen
Machbarkeit), es klingt nur ein wenig
oberlehrerhaft, auch wenn du vollkommen recht hast.
Der letzte Teilsatz sagt mir zu. ;-)
Wenn ich dafür die "Cheatah-Krankheit" auf mich nehmen
muß, dann soll es wohl so sein.
(Das gilt natürlich nicht, wenn man für andere
lesbaren Code schreiben muss
Es reicht schon, wenn andere (Kunden!) Dein Programm
auch nur _benutzen_ wollen.
Der Begriff "funktioniert" muß dann eine definierte
Bedeutung haben - andernfalls ändert der Kunde diese
Bedeutung so lange, bis Deine Firma pleite ist.
Die von dir genannte Vorgehensweise gehört m.E. zu
den Grundlagen beim Erlernen von dem Erstellen von
Programmen bzw. generell automatisierten Abläufen.
Eben - und dies zu vermitteln ist mein Beitrag zur
"Energie des Verstehens" in diesem Portal.
Ich wollte nur anmerken, dass man als
Fortgeschrittener viele Arbeitsschritte kombiniert.
Vorüberlegungen sind toll, aber damit ein Programm
läuft, bedarf es so oder so einer Umsetzung. ;)
Aber für die Entscheidung, ob man ein Programm über-
haupt zu realisieren _versucht_, bedarf es einer
Vorüberlegung. Diese verhindert, daß man sich an
Projekten versucht, die bei genauer Betrachtung von
vorn herein zum Scheitern verurteilt sind.
Klassisches Beispiel: "Wie schütze ich meine Bilder
davor, kopiert zu werden?" Möchtest Du das erst aus-
probieren, oder möchtest Du lieber vorher nachdenken?
Vor allem wenn diese Umsetzung keine Herausforderung
darstellt, wie es hier der Fall ist,
Jetzt tust Du dem Fragesteller aber Unrecht.
Ob etwas eine Herausforderung darstellt oder nicht,
das hängt immer von dem aktuellen Kenntnisstand des
Ausführenden ab. Gerade weil ich ihm in dieser Hin-
sicht etwas weniger zutraue als Dir, bin ich bei ihm
detaillierter darauf eingegangen, wo er seinen Arbeits-
prozeß verbessern sollte - und das betrifft _nicht_
den Programmier-Skill.
Ich denke einmal, wenn man professionell Software
schreibt, treffen meine Überlegungen nicht zu, aber
hey, Phil will "nur" ein kleines Suchskript für
seine Seite basteln, das muss nicht perfekt sein,
Aber er muß seinen Anwendern vermitteln, wie diese es
bedienen sollen! Wie kann er das tun, wenn er selbst
sich darüber noch gar nicht im Klaren ist?
Viele Grüße
Michael