kostenloser Webspace werbefrei: lima-city


MySQL String vergleich

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    siteplayer

    siteplayer hat kostenlosen Webspace.

    Gibt es einen Mysql Befehl mit dem ich überprüfen kann ob ein string in einem anderen string vorkommt?

    Codebeispiel:
    $query = $db->query('SELECT * FROM thema WHEN gruppe = "3" ');
    In der Datenbank würde dann bei jedem User ein String stehen mit seinen Gruppen.
    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
    WHEN
    bei MySQL nicht kenne. Meintest du vielleicht
    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
  4. t*****b

    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.
  5. Genau das ist die Lösung wenn es sich um das Problem handelt welches ich nicht gleich verstanden habe :wink:

    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.
  6. Autor dieses Themas

    siteplayer

    siteplayer hat kostenlosen Webspace.

    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.
  7. 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
  8. Autor dieses Themas

    siteplayer

    siteplayer hat kostenlosen Webspace.

    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.
  9. 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
  10. Autor dieses Themas

    siteplayer

    siteplayer hat kostenlosen Webspace.

    Ah gute Idee an so etwas hab ich noch gar nicht gedacht. =)
  11. 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?!
  12. 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.
  13. Autor dieses Themas

    siteplayer

    siteplayer hat kostenlosen Webspace.

    alfr3d schrieb:
    Was meinst du jetzt?!

    Die Idee mit dem Text-Dokument oder die zusätzlichen Daten?!
    Die zusätzlichen Daten die man noch gebrauchen könnte.
    loadi schrieb:
    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.
    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
  14. schneller is auf jeden fall die eigene tabelle ;)
  15. 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
  16. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!