Adressbuch-Recherchen

  • Hallo zusammen,

    ich bastle gerade an einem Adressbuch (php, mysql), habe nun aber einen 'Knoten im Hirn'.

    Datenpflege (Eingabe, Bearbeiten, Löschen) funzt alles. Nun möchte ich durch Recherche-Routinen bestimmte Datensätze aus der Adressen-Tabelle auslesen können, um mit dem Recherche-Ergebnis weiterzuarbeiten (Serienbriefe, Serienmails etc.). Es sollen sich dabei ggf. mehrere Recherchen zum Gesamtergebnis addieren oder subtrahieren.

    (1.) Wie gehe ich ein solches Problem grundsätzlich an? Mit extra (temporären) Tabellen (z.B. der recherchierten IDs aus der Adressentabelle)?

    (2.) Wie kann ich für eine solche Recherche das Formular nutzen, mit dem ich sonst Datensätze der Adressen-Tabelle editiere (enthält ca. 20 Felder aus der Adressentabelle)? Läuft das auf eine riesige SELECT-Anfrage mit allen Feldern des Formulars hinaus? Und wie gehe ich mit Datenfeldern um, in die bei der Rechere nix eingetragen wurde? Muß ich jedes Feld zunächst auf Vorhandensein eines Eintrags prüfen?

    Danke für jede Hilfe!

  • Hallo STA,

    wahrscheinlich bekommst Du keine Antworten, weil deine Fragen ziemlich allgemein und wenig konkret sind. Aber ich versuche trotzdem mal, dir zu antworten:


    Zu 2.: Im ersten Schritt ist für eine Recherche normaler Weise nur ein Parameter erforderlich. Von daher ist es fraglich ob es sinnvoll ist, dafür das Formular für die Eingabe mit allen Parametern zu nehmen. Natürlich sind auch mehrere Parameter möglich aber dann wird es ein wenig komplizierter: Man muss dann entscheiden ob sie "und"- oder "oder"-verknüpft werden sollen und u. U. dem Benutzer dafür eine Auswahl anbieten.


    Zitat

    wie gehe ich mit Datenfeldern um, in die bei der Rechere nix eingetragen wurde?

    Das lässt sich so pauschal kaum beantworten. Ist ein Parameter unverzichtbar, so sollte man gleich bei der Eingabe fordern, dass er angegeben wird. Mit der Formularvalidierung von HTML5 ist das recht einfach möglich.


    Zitat

    sollen sich dabei ggf. mehrere Recherchen zum Gesamtergebnis addieren oder subtrahieren.

    Generell ist es möglich, die Ergebnisse aus mehreren Tabellen mit einem join zu verknüpfen, so dass Du dann sofort das Gesamtergebnis bekommst. Temporäre Tabellen werden nur in Ausnahmefällen sinnvoll sein.

  • Hallo Sempervivum,


    danke für die Antwort. Es war mir schon klar, dass es mit derart globalen Fragen schwierig werden könnte.

    Zitat

    Natürlich sind auch mehrere Parameter möglich aber dann wird es ein wenig komplizierter: Man muss dann entscheiden ob sie "und"- oder "oder"-verknüpft werden sollen und u. U. dem Benutzer dafür eine Auswahl anbieten.


    Ich werde wohl nur die "und"-Variante zulassen. "Oder" macht bei dieser Recherchetechnik weniger Sinn.

    Zitat

    Das lässt sich so pauschal kaum beantworten. Ist ein Parameter unverzichtbar, so sollte man gleich bei der Eingabe fordern, dass er angegeben wird.

    Es geht hier nur um Recherchen, also nicht um irgendeine Datenmanipulationen. Die Formularvalidierung erfolgt bei Eingabe/Änderung der Daten sowieso. Meine Frage zielte darauf: Im Adressenformular gibt es c. 20 Felder (Firma, Abteilung, Name, Vorname, Straße, HausNr, PLZ, Ort, ...) Bei Recherchen werden aller Voraussicht nach aber nur einzelne dieser Felder (in UND-Verknüpfung) angefragt. Trunkierungen oder Platzhalter sind bei Recherchen mit einzugeben.


    Was mache ichmit den dann leer bleibenden Feldern im SELECT-Aufruf? Ich weiß ja nie, welche Felder angefragt werden. Wenn ich alle Felder in den SELECT-Aufruf schreiben, muss in leer gebliebenen FormFeldern auch stets was stehen...

    Zitat

    Gesamtergebnis addieren oder subtrahieren

    Ich sah sowas mal in einer anderen Datenbank. Recherche 1 lief durch. Bei einer gleich danach erfolgten Recherche 2 kam die Zwischenfrage mit den Optionen [A] "Wollen sie die Daten dem Rechereergebnis hinzufülen?", [B] "Wollen sie die Daten aus dem Rechereergebnis entfernen?". Solche schrittweise zusammengebauten Gesamtrecherchen ließen sich am Ende sogar abspeichern (die Rechere selbst, nicht das Rechercheergebnis) und stand fortan dem Nutzer dauerhaft zur Verfügung. Das warbei komplexen Recherchen sehr hilfreich.

  • Zitat

    Was mache ichmit den dann leer bleibenden Feldern im SELECT-Aufruf? Ich weiß ja nie, welche Felder angefragt werden. Wenn ich alle Felder in den SELECT-Aufruf schreiben, muss in leer gebliebenen FormFeldern auch stets was stehen...

    Normaler Weise ist zu empfehlen, die Felder, die im Ergebnis gebraucht werden, explizit anzugeben (statt "select *"). Ist dann ein Feld leer, so wird die Datenbank "null" zurück geben, also von der Abfrage her kein Problem.

  • Zitat

    schreibt man die Spaltennamen rein

    Wenn am Ende ein Filterergebnis raus kommen soll, ist doch aber eine WHRERE-Klausel erforderlich? Da hinein gehören dann die angefragten Recherche-Werte. Das funzt doch aber nicht, wenn bestimmte Felder keinen Recherche-Wert haben. Oder doch?

  • Selbstverständlich ist in diesem Zusammenhang auch eine WHERE-Klausel nötig. Wenn Du dort einen Wert ungleich null für ein bestimmtes Feld angibst ist die Bedingung natürlich nicht erfüllt, wenn in der DB kein Wert bzw. null steht. Du kannst jedoch null in die Bedingung einbeziehen:

    WHERE feld1=wert OR feld1=NULL

  • Zitat
    WHERE feld1=wert OR feld1=NULL

    Bei Recherche-Inhalten in mehreren Felden dann

    WHERE (feld1=wert OR feld1=NULL) AND (feld2=wert OR feld2=NULL)

    Sind die runden Klammern nötig?

  • Noch eine Detail-Info: Diese veroderte Abfrage kann man auch etwas kürzer formulieren mit dem IN-Operator:

    MySQL IN Operator
    W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript,…
    www.w3schools.com

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!