Ich habe eine Tabelle in der die User und Gruppen gleichermaßen vorhanden sind.
Nun möchte ich eine Volltextsuche verwirklichen in der ich z.B. nach einem Namen suchen möchte.
Dabei möchte ich die Gruppen NICHT ausgeben, also filtere ich diese auf Grund des fehlenden Geschlechtes aus.
Aber jeder User kann Mitglied einer Gruppe sein und ich möchte in einer Spalte all diese Gruppen ausgeben lassen. Alternativ könnte ich mir vorstellen, dass nur die Gruppen angezeigt werden, die mit dem Suchbegriff übereinstimmen.
Hier erstmal die Abfrage:
Ich habe jetzt noch eine Tabelle mit den Verknüpfungen zwischen User ID und Gruppen ID.
Ich könnte jetzt wie folgt vorgehen. Gibt ein Nutzer ein Suchwort an, dann suche ich erst in den Gruppen, ob ich was finde. z.B. lese ich dann nur die IDs aus. Das gleiche mache ich dann mit den Usern. Dann habe ich alle in Frage kommenden User IDs und Gruppen IDs.
Jetzt müsste ich in der Gruppentabelle suchen, welche User Mitglieder der Gruppen IDs sind und addiere diese zu den bereits gefundenen User IDs.
Als letztes lese ich die detailierten Daten aus von allen User IDs plus pro User eine weitere Abfrage, um alle seine Gruppen zu erhalten?!
Damit hätte ich mal geschickt aus einer Datenbankabfrage mehrere gemacht und verliere meiner Meinung nach die Reihenfolge wegen der Relevanz.
Ich gebe mal ein Datensatzbeispiel:
User- und Gruppentabelle:
ID NAME
1 name1
2 gruppe1
3 name2
4 name3
5 gruppe2
Verknüpfungstabelle
UID GID
1 2
1 5
3 2
4 2
Das Ergebnis bei der Suche nach dem Wort "gruppe2" sollte dann so aussehen:
1 name1 "gruppe1, gruppe2"
4 name3 "gruppe2"
Ich hatte eigentlich erst geplant einfach nur die Gruppen auszugeben, aber es wäre logischer, wenn auch direkt die Mitglieder der Gruppe ausgegeben werden. Deswegen wollte ich ganz auf die Ausgabe der Gruppen in den Suchergebnissen verzichten.
Vielleicht erstmal die primäre Frage: Wie ermittle ich für einen User alle seine Gruppen und gebe diese in EINER Spalte aus?
EDIT:
Ich habe da was gefunden was sich "find_in_set() > 0" nennt. Ist das mein Erlöser :?:
EDIT2:
Ich konnte nun das finden:
Im Moment verstehe ich daraus nicht wirklich viel, da ich GROUP_CONCAT noch nie benutzt habe.
EDIT3:
Stolz bin aufs erste Ergebnis
Diese Abfrage liefert mir für jeden User in einer Spalte alle seine Gruppen (IDs) mit Komma getrennt:
Jetzt muss ich gerade mal sehen, wie ich stattdessen die Gruppennamen bekomme, aber das wird denke ich kein großes Problem werden.
Gruß
Nun möchte ich eine Volltextsuche verwirklichen in der ich z.B. nach einem Namen suchen möchte.
Dabei möchte ich die Gruppen NICHT ausgeben, also filtere ich diese auf Grund des fehlenden Geschlechtes aus.
Aber jeder User kann Mitglied einer Gruppe sein und ich möchte in einer Spalte all diese Gruppen ausgeben lassen. Alternativ könnte ich mir vorstellen, dass nur die Gruppen angezeigt werden, die mit dem Suchbegriff übereinstimmen.
Hier erstmal die Abfrage:
PHP-Code:
$sql = 'SELECT u.uid, u.gender, u.username, u.hobby, u.group_name, u.dob, p.pid, p.ext' . $select . '
FROM users u' . $from . '
LEFT OUTER JOIN pics p ON p.uid = u.uid
WHERE u.active = 1
AND u.gender <> 0
AND u.uid <> ' . $userdata['uid'] . '
' . $where . '
' . $match . '
' . $order_by . '
LIMIT 200';
Ich könnte jetzt wie folgt vorgehen. Gibt ein Nutzer ein Suchwort an, dann suche ich erst in den Gruppen, ob ich was finde. z.B. lese ich dann nur die IDs aus. Das gleiche mache ich dann mit den Usern. Dann habe ich alle in Frage kommenden User IDs und Gruppen IDs.
Jetzt müsste ich in der Gruppentabelle suchen, welche User Mitglieder der Gruppen IDs sind und addiere diese zu den bereits gefundenen User IDs.
Als letztes lese ich die detailierten Daten aus von allen User IDs plus pro User eine weitere Abfrage, um alle seine Gruppen zu erhalten?!
Damit hätte ich mal geschickt aus einer Datenbankabfrage mehrere gemacht und verliere meiner Meinung nach die Reihenfolge wegen der Relevanz.
Ich gebe mal ein Datensatzbeispiel:
User- und Gruppentabelle:
ID NAME
1 name1
2 gruppe1
3 name2
4 name3
5 gruppe2
Verknüpfungstabelle
UID GID
1 2
1 5
3 2
4 2
Das Ergebnis bei der Suche nach dem Wort "gruppe2" sollte dann so aussehen:
1 name1 "gruppe1, gruppe2"
4 name3 "gruppe2"
Ich hatte eigentlich erst geplant einfach nur die Gruppen auszugeben, aber es wäre logischer, wenn auch direkt die Mitglieder der Gruppe ausgegeben werden. Deswegen wollte ich ganz auf die Ausgabe der Gruppen in den Suchergebnissen verzichten.
Vielleicht erstmal die primäre Frage: Wie ermittle ich für einen User alle seine Gruppen und gebe diese in EINER Spalte aus?
EDIT:
Ich habe da was gefunden was sich "find_in_set() > 0" nennt. Ist das mein Erlöser :?:
EDIT2:
Ich konnte nun das finden:
PHP-Code:
SELECT
t1.lastname,
GROUP_CONCAT(t2.firstname ORDER BY t2.firstname SEPARATOR ', ')
FROM tbl AS t1 INNER JOIN tbl AS t2 USING (id)
GROUP BY t1.lastname;
EDIT3:
Stolz bin aufs erste Ergebnis
Diese Abfrage liefert mir für jeden User in einer Spalte alle seine Gruppen (IDs) mit Komma getrennt:
PHP-Code:
SELECT u.uid, u.gender, u.username, u.hobby, u.dob, p.pid, p.ext, GROUP_CONCAT( g.gid
ORDER BY g.gid
SEPARATOR ', ' ) AS group_name
FROM users u
INNER JOIN groups g
USING ( uid )
LEFT OUTER JOIN pics p ON p.uid = u.uid
WHERE u.active = 1
AND u.gender <> 0
AND u.uid <> 9
AND (
MATCH (
u.username, u.firstname, u.lastname, u.group_name, u.hobby, u.postcode, u.city, u.website, u.enjoy, u.search, u.offer
)
AGAINST (
'gutt'
IN BOOLEAN
MODE
)
)
GROUP BY u.uid
LIMIT 200
Gruß
Kommentar