Seite 1 von 1
Simple Suchmaske für Memberlist
Verfasst: 03.12.2008 17:34
von issjut
Ich benötige ganz dringend Eine Suchmaske in der man(n) oder auch Frau nach Mitgliedern meines Forums suchen kann. Suchergebnis dann wie gewohnt als Ausgabe in der Memberlist, nur eben gefiltert!
Was ich meine sollte eigentlich Jeder von der ein oder anderen Datingseite kennen.
Ich bin [Mann] / [Frau] und suche [Mann] / [Frau] im Alter von [Alter bis Alter]
Die Angaben befinden sich ja alle in der Datenbank, also sollte doch eine Filterung bei der Ausgabe kein großes Problem sein, oder?
Also wir hätten das Geschlecht (Gender Mod), wir hätten die "Orientierung" der mitglieder (CPF_Suche_nach) und wir hätten das Alter (Geburtsdatum).
Liegt es also nur noch an der Umsetzung
Könnte mir vielleicht jemand dabei behilflich sein oder mir zumindest den richtigen Weg weisen

?!
Verfasst: 03.12.2008 18:52
von nickvergessen
Das ist kein Ersatz für die Jobbörse hier

Verfasst: 03.12.2008 19:03
von issjut
nee nee ich brauch ja nur hilfe^^
Nen bisschen will ich ja auch alleine machen.
Bin allerdings nicht ganz so fit was SQL Abfragen angeht

Verfasst: 06.12.2008 18:37
von issjut
ist das so schwierig, dass keiner Helfen kann?

Verfasst: 07.12.2008 01:46
von gn#36
Dann poste doch erst mal ein paar Daten damit das überhaupt geht... Ich kann dir z.B. nicht helfen ohne zu wissen in welchen Tabellen die Daten gespeichert sind die du haben willst und wie die Tabellenspalten heißen. Das könntest du in KB:phpmyadmin nachsehen und dann hier posten um es etwas einfacher zu machen dir zu helfen.
Verfasst: 07.12.2008 05:32
von issjut
Also, ich stelle es mir ja so vor, dass im Grunde die normale Ausgabe der Mitgliederliste gefiltert wird
Auswahlmöglichkeiten die die Ausgabe filtern sind:
Ich bin [Geschlecht] und suche [Geschlecht] im Alter [Von] [Bis]
Demnach brauchte man folgende Daten:
Schritt 1: Filterung nach Orientierung
tabelle: php_users
Spalte: user_gender
Inhalt: 1 = Mann, 2 = Frau
und
tabelle: php_profile_fields_data
Spalte: pf_orientierung
Inhalt: 1 = finde es heraus, 2 = Mann, 3 = Frau, 4 = egal
Diese Bedingungen müssten dann entsprechend der Auswahl geprüft werden:
Bei, bin Mann suche Frau:
Zeigt alle User mit
user_gender = 2
pf_orientierung = 1 oder 2 oder 4
Bei, bin Frau suche Mann:
Zeigt alle User mit
user_gender = 2
pf_orientierung = 1 oder 3 oder 4
Bei, bin Mann suche Mann:
Zeigt alle User mit
user_gender = 1
pf_orientierung = 2
Bei, bin Frau suche Frau:
Zeigt alle User mit
user_gender = 2
pf_orientierung = 3
Schritt 2: Filterung nach Alter
tabelle: php_users
Spalte: user_birthday
Als Auswahl dann nach Möglichkeit das Feld VON und das Feld BIS
jeweils mit vorgegebenen Werten, z.B. 16, 18, 20, 25, 30, 35, 40 oder "kein Wert" als ne Art default (nach oben oder unten keine Grenze)
Bei, von 18 Jahren bis 25 Jahren
würden demnach nur Mitglieder im Alter von 18-25 Jahren angezeigt werden.
--------------------------------------------------------------------------
Ich hoffe ich konnte das ganze einigermaßen verständlich rüber bringen!
Verfasst: 07.12.2008 06:33
von gn#36
Ok, da lässt sich was mit anfangen:
Code: Alles auswählen
$sql = "SELECT u.user_id FROM " . USERS_TABLE . " u
LEFT JOIN " . PROFILE_FIELDS_DATA_TABLE . " pfd ON pfd.user_id = u.user_id
WHERE u.user_gender = {was du haben willst, z.b. per Variable} AND " . $db->sql_in_set('pfd.pf_orientierung', array({liste der Zahlen die zulässig sind}));
Punkt zwei könnte was schwieriger werden, das Datumsformat der Geburtstagsspalte scheint ein wenig seltsam zu sein, direkte größenvergleiche sind anscheinend so ohne weiteres nicht möglich (man kann zwar nach speziellen Jahren suchen aber Geburtstag A > Geburtstag B ? geht nur über die Abfrage beider Geburtstage und anschließenden Vergleich so wie ich das sehe).
Wenn du das mit obiger Abfrage kombinieren willst kannst du aber auch per PHP sortieren, indem du obige Abfrage machst, allerdings noch den Geburtstag mit abfragst. Dann kannst du den Geburtstag per [php:explode]('-', $geburtstag) in einer Schleife zerpflücken, solltest auf Monat und Tag [php:trim]() anwenden (in der DB stehen bei einstelligen Daten leerzeichen!), dann die Werte in der Reihenfolge Jahr Monat Tag mit führender Null bei einstelligen werten aneinander hängen und dann nach diesem Wert sortieren, hieraus kannst du dann den gewünschten Datumsbereich extrahieren durch Größenabfrage, z.b. grob so:
Code: Alles auswählen
foreach($array as $value => $key)
{
if($value >= $datum_anfang && $value <= $datum_ende)
{
//Mach was auch immer du willst mit diesem wert, er liegt im bereich
}
elseif($value > $datum_ende)
{
//Zu groß, da wir sortiert haben gilt das für alle folgenden Werte
break;
}
}
Verfasst: 07.12.2008 15:08
von hackepeter13
@issjut
ich habe eben auf phpbb.com die MOD
My Profile Space (MPS) entdeckt.
Auf dem Demoboard, gibt es auch einen Test-Acc, schau dir dort mal die MPS Suchseite an, ich glaube das ist doch genau das was du suchst.
Vllt. kannst du dir ja einiges aus der MOD raussuchen.