SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)
Hilfe Community Kalender Heutige Beiträge Suchen

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 08.04.2010, 16:23:30
Lutz Lutz ist offline
Anfänger
 
Registriert seit: Apr 2010
Alter: 51
Beiträge: 3
Suche erweitern

Hallo,

ich wollte heute mal die Suche auf meiner Website erweitern. Bisher war sie ganz simpel gestrickt. Man konnte einen Suchbegriff eingeben und nach dem wurde dann mittels LIKE in der Datenbank bzw. entsprechenden Tabelle/Spalte gesucht.

Nun möchte ich aber meine Seite noch zusätzlich um eine erweiterte Suche erweitern in dem man u.a. nach Hobbys, Bruttogehalt, Personen pro Haushalt, Alter usw. suchen kann. Dabei habe ich mir dass so gedacht dass ich dafür in HTML einzelne Auswahllisten definiere zum Beispiel für Personen pro Haushalt:
HTML-Code:
    <select name="pers" size="5">
      <option value="1">1 oder mehr</option>
      <option value="2">2 oder mehr</option>
      <option value="3">3 oder mehr</option>
      <option value="4">4 oder mehr</option>
      <option value="5">5 oder mehr</option>
      <option value="6">mehr als 5</option>
    </select>
Das gleiche für die anderen Suchkriterien also für Bruttogehalt würde ich dann in 100€ Schritten hoch gehen damit es natürlich nicht zu viel in der Auswahlliste wird. Bei Hobbys wird das ganze allerdings noch komplizierter da dort auch eine Mehrfachauswahl mittels "multiple" möglich sein soll. Die einzelnen Hobbys werden dann einfach aus der Datenbank ausgelesen und in die Auswahlbox eingetragen Bspw. so:
Code:
SELECT ID, hobbys FROM tabelle_hobbys
In HTML wird dann die Auswahlliste nur noch entsprechend gefüllt:
HTML-Code:
    <select name="hobbys" size="5" multiple>
      <option value="1">Radfahren</option>
      <option value="2">Fußball</option>
      <option value="3">Schwimmen</option>
      <option value="4">Tennis</option>
      <option value="5">Lesen</option>
      <option value="6">Fernsehen</option>
      .......
    </select>
Das funktionierst soweit auch schon sehr gut!

Nun stellt sich mir aber die Frage wie ich wohl die Datenbank am besten für die Suche gestalte und wie dann eine entsprechende Abfrage auszusehen hat. Die Suche soll so funktionieren das man zum Beispiel eine oder auch mehrere Optionen auswählen kann und diese dann in der Datenbank gesucht und dem entsprechenden User zugeordnet werden. Dabei sollen die einzelnen Optionen innerhalb einer Auswahlliste mit ODER verknüpft werden (es reicht also wenn eines der Hobbys übereinstimmt wenn man mehrere ausgewählt hat) und die einzelnen Auswahllisten wiederum mit UND (es muss also mindestens eine Option pro Auswahlliste übereinstimmen außer man hat eine Auswahlliste frei gelassen sprich keine Option gewählt).

Dazu habe ich mir nun folgende Variante überlegt. Ich erstelle eine Tabelle, nennen wir sie mal "Zusammenfassung" mit drei Spalten. Die erste für die ID der User welche so auch in der Tabelle User vorkommt. Die zweite für die ID der Auswahlliste welche so auch in der Tabelle "Auswahllisten" vorkommt z.B. ID 1 = Hobbys, ID 2 = Alter usw. Und die dritte Spalte letztendlich für die ID der einzelnen Optionen die man auswählen kann so wie sie auch in der Tabelle "Optionen" vorhanden sind. Die beiden Zusatztabellen ("Auswahllisten" und "Optionen") sind bisher nur Theorie und können daher auch noch geändert werden oder falls es eine bessere Methode gibt ganz entfallen. Die Tabelle "Optionen" enthält neben den Option-IDs und den Namen der Optionen (Tennis, Fußball, Schwimmen...) auch noch die ID der Auswahllisten wie sich in der Tabelle "Auswahllisten" zugeordnet ist.

Die Tabelle "Zusammenfassung" vereint also die ganzen Informationen zu den einzelnen Usern und Suchkriterien anhand der IDs. Wie ich die Tabelle fülle wäre mir klar aber wie ich die Daten dann wieder über eine Suche raus filtere mag sich mir noch nicht so ganz offenbaren. Das Problem ist, wie muss ich die Abfrage gestalten um sowohl Treffer zu bekommen wenn mindestens eine der Optionen in den Auswahllisten übereinstimmt obwohl mehrere ausgewählt wurden und das für jede Auswahlliste! Also angenommen ich suche nach den Hobbys "Lesen", "Fußball" und "Tennis" und nach dem Alter "20-30" und "30-40" und nach den Personen pro Haushalt "2 oder mehr". Dann sollten, vorausgesetzt es existieren entsprechende Datensätze, alle User gefunden werden mit mindestens einem der Hobbys UND einem der Altersklassen UND einem der Personen pro Haushalt-Optionen. Natürlich kann man auch noch zusätzlich LIKE '%xyz%' für die Suche in der Personenbeschreibung anwenden um die Suche noch genauer einzugrenzen.

Wie kann ich so eine Suche realisieren? Die Tabellen können noch umgestellt werden falls es eine bessere Lösung gibt als mein Vorschlag mit der Tabelle "Zusammenfassung". Ich wäre für jede Hilfe dankbar und hoffe es findet sich ein Fachmann der mir ein paar Tipps, besser noch Beispiele liefern kann!


Danke und freundliche Grüße,
Lutz
Mit Zitat antworten
  #2  
Alt 09.04.2010, 10:18:33
Benutzerbild von urvater
urvater urvater ist offline
Senior Member
 
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
AW: Suche erweitern

Im Grunde schreibst du doch deine Lösung selbst.

Alle Bedingungen, die ein OR haben müssten in Klammern gesetzt werden und die anderen Bedingungen mit AND zugeordnet.

Beispiel

SELECT * FROM `tabelle` WHERE hobby IN (4,2,5) AND (alter = '20-30' OR alter='30-40') AND personen = 2

Hinweis: hobby soll einen der Werte besitzen, den die Mehrfachauswahl als value (ID) besitzt.
Mit Zitat antworten
  #3  
Alt 09.04.2010, 19:16:14
Lutz Lutz ist offline
Anfänger
 
Registriert seit: Apr 2010
Alter: 51
Beiträge: 3
AW: Suche erweitern

Zitat:
Zitat von urvater Beitrag anzeigen
SELECT * FROM `tabelle` WHERE hobby IN (4,2,5) AND (alter = '20-30' OR alter='30-40') AND personen = 2
Hallo urvater,

mit deiner Abfrage setzt du aber voraus das in `tabelle` die einzelnen Spalten Hobby, Alter, Personen usw. existieren! Dann hätte ich das auch so gemacht wie du vorschlägst. Aber dann könnte ich ja etliche Spalten machen und immer wenn eine neue Aswahl hinzukommt muss ich die Tabelle dann erweitern. In der Tabelle die ich mir vorstellte gibt es daher nur 3 Spalten! Hobby, Alter, Personen usw. sind also in einer einzigen Spalte vereint. Es gibt also für jedes Element eine eigene ID z.B. Hobby = 1, Alter = 2, Personen = 3 usw. wodurch die einzelnen Kriterien zuordbar sind.

Erste Spalte = User_ID
Zweite Spalte = Auswahl_ID (1=Hobby, 2=Alter, 3=Personen, 4=.....)
Dritte Spalte = Option_ID (1=Fußball, 2=Tennis, 3=Schwimmen, 1=20-30, 2=30-40 usw...)

Wie würde denn dann eine entsprechende Abfrage aussehen? Ich habe es schon mit
Code:
SELECT DISTINCT User_ID FROM `tabelle` WHERE (Auswahl_ID=1 && Option_ID IN (1,2,3)) || (Auswahl_ID=2 && Option_ID IN (1,2,3,4,5)) || (Auswahl_ID=3 && Option_ID IN (2,3)) GROUP BY User_ID
versucht. Aber ich bekomme dann irgendwie noch immer zu viele Ergebnisse angezeigt.


MfG Lutz
Mit Zitat antworten
  #4  
Alt 09.04.2010, 21:54:23
Benutzerbild von urvater
urvater urvater ist offline
Senior Member
 
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
AW: Suche erweitern

Kannst du mal den Aufbau deiner Tabelle posten und einige Beispieldaten, wie du sie speicherst bzw. speichern willst?

So wie ich das aus dem bisherigen erkennen kann würde bei dir option_id = 1 sowohl für Fussball wie auch dem Alter 20-30 entsprechen. Gerade bei deiner gewünschten Mehrfachauswahl muss es daher auch zu zu vielen Ergebnissen kommen. Ich kann mich allerdings irren, da mir deine Tabelle weder vom Aufbau noch Inhalt bekannt ist.

Für mein bisheriges Verständnis sind deine Daten zu sehr vermischt.
Wer als hobby 1 gewählt hat muss ja nicht automatisch in der dem gewünschten alter sein.

Dein Versuch sucht aber alle, die als Hobby 1 haben
oder
alle, die im alter x-y sind
oder
zu den Personen 2,3 gehören

Das heisst aber nicht, daß eine Person 2 im Alter XY ist und Fussball mag. Die Suche kann eigentlich nie dein gewünschtes Ergebnis bringen so wie ich den Aufbau deiner Tabelle bislang verstehe. Näheres kann man allerdings erst sagen, wenn mehr bekannt ist.

EDIT:
Mal ein Beispiel
Die Person mit der ID 12 mag Fussball und Schwimmen, ist 45 Jahre und gehört zu Personen 3

Bei deiner Suche würde sie durch Fussball gefunden werden und weil sie zu Personen 3 gehört

Die Person 1 mag Lesen ist 20 und gehört zu Personen 1

Auch sie würde durch ihr Alter als Ergebnis erscheinen.

Es besteht kein Zusammenhang zwischen Hobby, Alter und Personen in der Tabelle.

ENDE EDIT
Mit Zitat antworten
Antwort

Stichworte
suche erweitern sql


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Überlegungen einer sinnvollen Suche Tikiwiki Off Topic Area 4 15.12.2005 10:57:44
Suche utf-8 odessa MySQLi/PDO/(MySQL) 5 31.10.2005 12:53:43
Suche Programmieren Black-Apfelkuch PHP Grundlagen 5 19.04.2004 23:01:01
suche nach regex feuervogel PHP für Fortgeschrittene und Experten 1 15.03.2004 16:03:17
such script; suche nach plz patrickn MySQLi/PDO/(MySQL) 9 16.08.2003 01:22:29


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:08:34 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt