Ich bitte um Hilfe: WHERE Abfrage

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Ich bitte um Hilfe: WHERE Abfrage

    Da ich MYSQL-Anfänger bin, habe komme ich bei Fogendem nicht weiter:

    Tabellen: user und user_groups

    Tabelle user:
    user_name|user_groups
    Name_1|.11.13.15
    Name_2|.10.13.16

    Tabelle user_groups:
    group_id|group_name
    10|Bäcker
    11|Maurer
    12|Manager
    usw...

    Ich möchte nun z.B. wissen, welcher user_name in der group_id 13 ist.

    Meine (erfolglose) Abfrage:
    PHP-Code:
    $query 'SELECT
              user_name, user_groups, group_id, group_name
              FROM
              users, user_groups
              WHERE
              user_groups = 13  
              ORDER BY
              user_name
              '

    Da ja in user_groups ein mit "Punkt" getrennter String steht, schlägt die Abfrage fehl.

    Wie kann ich diese Abfrage besser machen?

    Vielen Dank schon einmal für eure Hilfe.

    P.S. Bitte nicht schimpfen, ich bin halt noch am Lernen

  • #2
    Zitat von Wasser_Wanderer Beitrag anzeigen
    Da ja in user_groups ein mit "Punkt" getrennter String steht, schlägt die Abfrage fehl.
    Das ist ja auch so falsch. In einer Spalte sollte nicht mehr als ein Wert stehen. Informiere dich mal über Datenbanknormalisierung.

    Kommentar


    • #3
      Zitat von h3ll Beitrag anzeigen
      Das ist ja auch so falsch. In einer Spalte sollte nicht mehr als ein Wert stehen. Informiere dich mal über Datenbanknormalisierung.
      Das stimmt, aber in dem PHP-Fusion Board wird das nunmal so in die DB geschrieben. Deshalb kann ich ja nur mit diesen Vorgaben arbeiten.

      Kommentar


      • #4
        Dann bleibt wohl nur FIND_IN_SET() mit all seinen Nachteilen.

        Kommentar


        • #5
          Danke h3ll für deinen Hinweis mit FIND_IN_SET.

          Leider bin ich zu dumm damit zu arbeiten. Habe das Manual natürlich dazu gelesen und diese Funktion in verschiedenen Kombinationen versucht einzubauen.

          Aber:
          durch googeln nach Beispielen zu dieser Funktion, bin ich auf die Funktion WHERE user_groups LIKE "%13%" AND group_id = 13 gestoßen.

          Damit konnte ich meine Aufgabe lösen. Ob diese gut oder schlecht ist...... das weis ich nicht.

          Kommentar


          • #6
            Zitat von Wasser_Wanderer Beitrag anzeigen
            Damit konnte ich meine Aufgabe lösen. Ob diese gut oder schlecht ist...... das weis ich nicht.
            Nee.... damit ging es nicht da, nicht nur 13 sondern auch 1 und 3 matchen.

            Zufällig bin ich auf MySQL :: MySQL 5.1 Referenzhandbuch :: G Beschreibung der MySQL-Syntax für reguläre Ausdrücke
            gestossen.

            Damit kann man auch MYSQL mit einer REGEX füttern.

            Ich habs dann so lösen können:
            PHP-Code:
            WHERE user_groups REGEXP('^\\\.{$_GET['group_id']}$|\\\.{$_GET['group_id']}\\\.|\\\.{$_GET['group_id']}$') AND group_id $gruppen_id 
            Die GET-Parameter sind bei mir aus nem Formular zum testen

            Kommentar


            • #7
              Damit baust du eine schöne Sicherheitslücke. GET- und POST-Werte dürfen niemals direkt in SQL-Abfragen eingefügt werden. Im besten Fall schlägt die Abfrage einfach fehl. Im schlimmsten Fall bemerkt jemand die Lücke und übernimmt deinen Server.

              Immer den Kontextwechsel beachten! Sowohl bei SQL als auch bei HTML, URL und JavaScript:

              http://wiki.selfhtml.org/wiki/Artike..._und_behandeln
              Zuletzt geändert von h3ll; 17.02.2013, 18:39.

              Kommentar


              • #8
                Problem gelöst

                Zitat von h3ll Beitrag anzeigen
                Damit baust du eine schöne Sicherheitslücke. GET- und POST-Werte dürfen niemals direkt in SQL-Abfragen eingefügt werden. Im besten Fall schlägt die Abfrage einfach fehl. Im schlimmsten Fall bemerkt jemand die Lücke und übernimmt deinen Server.

                Immer den Kontextwechsel beachten! Sowohl bei SQL als auch bei HTML, URL und JavaScript:

                Artikel:Kontextwechsel/erkennen und behandeln ? SELFHTML-Wiki
                Da hast du natürlich vollkommen Recht h3ll,
                ich hab die GET/POST-Werte auch nur mal schnell zum testen genommen.

                Kann geschlossen werden

                Kommentar

                Lädt...
                X