• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage In Zeichenkette suchen

drumer

Mitglied
Ich programmiere ein Forum auf meiner Homepage http://www.levi-jacobs.de/ .
Dabei habe ich folgende mysql Tabbelle:

+-------+------------------------------+------+
| id | bezeichnung | für |
+-------+------------------------------+------+
| 1| Unterhaltungen | alle |
| 24 | html Scrollbar erstellen | alle |
| 25 | Gemüsepfanne | alle |
| 26 | html textarea | alle |
| 27 | Loom Bänder | alle |
| 28| über dieses Forum | alle |
+-------+-------------------------------+------+

Bei der Spalte "für" sollen später die Namen von den Personen stehen, die das Thema lesen dürfen.

+-------+------------------------------+---------------------------------+
| id | bezeichnung | für |
+-------+------------------------------+--------------------------------- +
| 1| Unterhaltungen | Nutzer1, Nutzer2, Nutzer5 |

Wenn ich also die Themen anzeige, soll das habe ich das bisher so gemacht:

select thema.bezeichnung from thema where für='alle' or für='Nutzer1' order by thema.id desc;

Wenn das Thema aber für mehrere Nutzer gedacht ist, muss ich die Zeichenkette "Nutzer1, Nutzer2, Nutzer5" dann nach "Nutzer1" überprüfen.
kann mir da jemand helfen?
 
Werbung:
Ich programmiere ein Forum auf meiner Homepage http://www.levi-jacobs.de/ .
Dabei habe ich folgende mysql Tabbelle:

+-------+------------------------------+------+
| id | bezeichnung | für |
+-------+------------------------------+------+
| 1| Unterhaltungen | alle |
| 24 | html Scrollbar erstellen | alle |
| 25 | Gemüsepfanne | alle |
| 26 | html textarea | alle |
| 27 | Loom Bänder | alle |
| 28| über dieses Forum | alle |
+-------+-------------------------------+------+

Bei der Spalte "für" sollen später die Namen von den Personen stehen, die das Thema lesen dürfen.

+-------+------------------------------+---------------------------------+
| id | bezeichnung | für |
+-------+------------------------------+--------------------------------- +
| 1| Unterhaltungen | Nutzer1, Nutzer2, Nutzer5 |

Wenn ich also die Themen anzeige, soll das habe ich das bisher so gemacht:

select thema.bezeichnung from thema where für='alle' or für='Nutzer1' order by thema.id desc;

Wenn das Thema aber für mehrere Nutzer gedacht ist, muss ich die Zeichenkette "Nutzer1, Nutzer2, Nutzer5" dann nach "Nutzer1" überprüfen.
kann mir da jemand helfen?

Machbar wäre das theoretisch mit "REGEXP".
Je nach erlaubten Zeichenketten ist das jedoch alles andere als sicher.

Um das sauber zu lösen solltest du 3 Tabellen erstellen:
User <-> UserConversation <-> Conversation

Die Tabelle UserConversation verknüpft User IDs mit Conversation IDs.
Das ganze kannst du dann ungefähr so abfragen:
Code:
SELECT DISTINCT
  c.*
FROM
  Conversation AS c
LEFT JOIN
  UserConversation AS uc ON (c.id = uc.conversationId)
LEFT JOIN
  User AS u ON (u.id = uc.userId)
WHERE
  u.id = 5

Weiß leider nicht ob oben genannte Query wirklich richtig ist, da ich schon seit Jahren fast nicht mehr mit Raw SQL arbeite. Ich denke aber es sollte ersichtlich sein wie das ungefähr funktioniert.
 
Die Namen halte ich für keine gute Idee, wenn dann die ID`s der Userdaten, damit die Zuordnung eindeutig ist.
Den Inhalt des Feldes "für" kannst du in ein Array laden und dann z.B. mit in_array() auf das Vorhandensein einer bestimmten USERID prüfen

Da du aber mit einer Datenbank arbeitest, mach es doch gleich richtg und achte auf Normalform und leg dir (wie schon gesagt) eine Hilfstabelle mit zusammengesetztem Primärschlüssel an wo du die Userid und die Datensatzid der Tabelle oben einträgst. Durch den zusammengesetzten Primärschlüssel kannst du keine Daten doppelt eintragen und es gibt keine Restriktionen für die Anzahl User. Abfragen über User mit Zugriffen oder Themen, auf die bestimmte User zugreifen können sind auch extrem leicht zu bewerkstelligen

Code:
[Tabelle "für"]
USERID    |   TABELLE_OBEN_ID
-----------------------------------
PRI       |   PRI

Also wenn schon, denn schon...
 
Werbung:
Machbar wäre das theoretisch mit "REGEXP".
Je nach erlaubten Zeichenketten ist das jedoch alles andere als sicher.

Um das sauber zu lösen solltest du 3 Tabellen erstellen:
User <-> UserConversation <-> Conversation

Die Tabelle UserConversation verknüpft User IDs mit Conversation IDs.
Das ganze kannst du dann ungefähr so abfragen:
Code:
SELECT DISTINCT
  c.*
FROM
  Conversation AS c
LEFT JOIN
  UserConversation AS uc ON (c.id = uc.conversationId)
LEFT JOIN
  User AS u ON (u.id = uc.userId)
WHERE
  u.id = 5

Weiß leider nicht ob oben genannte Query wirklich richtig ist, da ich schon seit Jahren fast nicht mehr mit Raw SQL arbeite. Ich denke aber es sollte ersichtlich sein wie das ungefähr funktioniert.


Die Namen halte ich für keine gute Idee, wenn dann die ID`s der Userdaten, damit die Zuordnung eindeutig ist.

Den Inhalt des Feldes "für" kannst du in ein Array laden und dann z.B. mit in_array() auf das Vorhandensein einer bestimmten USERID prüfen



Da du aber mit einer Datenbank arbeitest, mach es doch gleich richtg und achte auf Normalform und leg dir (wie schon gesagt) eine Hilfstabelle mit zusammengesetztem Primärschlüssel an wo du die Userid und die Datensatzid der Tabelle oben einträgst. Durch den zusammengesetzten Primärschlüssel kannst du keine Daten doppelt eintragen und es gibt keine Restriktionen für die Anzahl User. Abfragen über User mit Zugriffen oder Themen, auf die bestimmte User zugreifen können sind auch extrem leicht zu bewerkstelligen



Code:
[Tabelle "für"]

USERID    |   TABELLE_OBEN_ID

-----------------------------------

PRI       |   PRI



Also wenn schon, denn schon...

Weiß leider nicht ob oben genannte Query wirklich richtig ist, da ich schon seit Jahren fast nicht mehr mit Raw SQL arbeite. Ich denke aber es sollte ersichtlich sein wie das ungefähr funktioniert.[/QUOTE]

Prima, funktioniert super! Vielen dank!
 
Zurück
Oben