MySQL String vergleich
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
aufwand
befehl
code
datenbank
datensatz
datum
dokument
dokumentation
ermitteln
funktion
gruppe
idee
komma
sache
string
tabelle
text
trennen
zweck
-
Gibt es einen Mysql Befehl mit dem ich überprüfen kann ob ein string in einem anderen string vorkommt?
Codebeispiel:
In der Datenbank würde dann bei jedem User ein String stehen mit seinen Gruppen.$query = $db->query('SELECT * FROM thema WHEN gruppe = "3" ');
z.B. "8,16,3,5,20,1,4,33,15,2"
Gibt es dafür eine Funktion oder wie könnte ich das ganze sonst überprüfen.
Beitrag zuletzt geändert: 16.11.2010 12:55:02 von siteplayer -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich verstehe jetzt nicht ganz was du möchtest. Wie ist denn deine Tabelle aufgebaut?
Was du mit der Datenbankabfrage bezwecken möchtest weiß ich auch nicht, zumal ich auch den Befehl
bei MySQL nicht kenne. Meintest du vielleichtWHEN
?WHERE
Und möchtest du alle "Gruppen" in einem Feld speichern?
//edit: ich glaub ich weiß was du meinst:
Tabelle:
userId | gruppen 1 | 8,16,3,5,20,1,4,33,15,2 2 | 3,7,19,25
Und wenn in gruppen die 3 enthalten ist, soll er ausgelesen werden oder?
Wenn ja: dann lass es, und mach für jede Gruppe in der der User ist einen neuen Eintrag.
Beitrag zuletzt geändert: 16.11.2010 13:05:45 von alfr3d -
Schreibe keinen String für die Gruppen in die Usertabelle, sondern erstelle eine extra Tabelle, in der die User mit den Gruppen verknüpft sind:
id, userid, groupid
Dann kannst du mit den Werten arbeiten. -
Genau das ist die Lösung wenn es sich um das Problem handelt welches ich nicht gleich verstanden habe
Dann kannst du über eine einfache Abfrage ermitteln ob der user in der gruppe 3 ist:
$sql = mysql_query("SELECT * FROM tabelle WHERE groupid = '3'"); while($row = mysql_fetch_object($sql){ echo $row->userid }
Dann würdest du als Ergebnis alle Benutzer erhalten die in der Gruppe 3 sind.
Also generell, solche Sachen aufspalten auf meherer Einträge, bevor du so ein durcheinander in eine Spalte speicherst. -
Ups verschrieben :D
Alle Gruppen eines Users werden mit implode() zu einem String umgewandelt und in die Datenbank geschrieben. Ich möchte jetzt überprüfen welche User alles in Gruppe 3 sind. Jetzt müsste ich dafür alle Userdaten Laden und mit explode() trennen und überprüfen. Das ist meiner Meinung nach nicht gerade die beste Lösung.
Ich suche eine Mysql-Funktion die schon bei der Abfrage überprüft ob die 3 in einem String vorkommt.
[EDIT] Okay, wollte nur Wissen ob es nicht doch eien Funktion dafür gibt eh ich das so Löse^^
Dank euch. -
Müsstest du mal in der MySQL-Dokumentation suchen.
Was vlt fein Ansatz wäre:
...WHERE gruppe = '%3%'
Allerdings bekommst du so wahrscheinlich auch Sachen wie: 13, 35, 143 etc zurück geliefert, eben alles wo eine 3 drinsteckt.
Beitrag zuletzt geändert: 16.11.2010 13:11:46 von alfr3d -
Das habe ich auch schon in Augenschein genommen und wegen eben diesen Gründen wieder verworfen. Hab schon nachgeschaut aber nix Gefunden.
Naja muss ich das mit ner neuen Tabelle Lösen. -
Ja würde ich an deiner Stelle auch machen, ist viel flexibler und weniger Aufwand. Außerdem sollten Datenbanken so aufgebaut sein, das ist ja der Sinn und Zweck, sonst könntest du das ganze in ein text-Dokument schreiben und aufwändig auseinander nehmen.
Außerdem könntest du ggf noch genauere Daten zu jedem Datensatz hinzufügen, wie z.B. Beitrittszeitpunkt in eine Gruppe etc...
Beitrag zuletzt geändert: 16.11.2010 13:20:48 von alfr3d -
Ah gute Idee an so etwas hab ich noch gar nicht gedacht. =)
-
siteplayer schrieb:
Ah gute Idee an so etwas hab ich noch gar nicht gedacht. =)
Was meinst du jetzt?!
Die Idee mit dem Text-Dokument oder die zusätzlichen Daten?! -
Du könntest auch bei deinem implode ein Trennzeichen einfügen. In dann suchst du beispielsweise nach
... WHERE group='%,3,%
Du musst dann nur sichergehen, dass auch vorne und hinten ein Komma steht. -
alfr3d schrieb:
Die zusätzlichen Daten die man noch gebrauchen könnte.
Was meinst du jetzt?!
Die Idee mit dem Text-Dokument oder die zusätzlichen Daten?!
loadi schrieb:
Darauf bin ich auch noch nicht gekommen o.O Wäre auf jeden fall noch eine weitere Möglichkeit. Mich würde nur mal interessieren welche schneller wäre. :D
Du könntest auch bei deinem implode ein Trennzeichen einfügen. In dann suchst du beispielsweise nach
... WHERE group='%,3,%
Du musst dann nur sichergehen, dass auch vorne und hinten ein Komma steht.
-
schneller is auf jeden fall die eigene tabelle ;)
-
1. Wenn überhaupt, dann muss die Abfrage so lauten:
WHERE group LIKE '%,3,%'
2. Geschwindigkeit spielt hier keine Rolle, es sei denn, es handelt sich um mehrere tausend Abfragen....
3. Ich empfehle, wie auch meine Vorredner, sämtliche User und Gruppenzuweisungen in einer eigenen Tabelle vorzunehmen, z.B.
INSERT INTO `user_to_groups` (`userID`, `groupID`) VALUES (1, 1), (1, 3), (1, 4), (1, 10), (2, 1), (2, 3), ......
Alles Andere ist unnötig und wird auch bei "moderner" Software SO gemacht ;)
Beitrag zuletzt geändert: 17.11.2010 22:22:20 von fabo -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage