Ich bitte um Hilfe: WHERE Abfrage

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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
    Originally posted by Wasser_Wanderer View Post
    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.

    Comment


    • #3
      Originally posted by h3ll View Post
      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.

      Comment


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

        Comment


        • #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.

          Comment


          • #6
            Originally posted by Wasser_Wanderer View Post
            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

            Comment


            • #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
              Last edited by h3ll; 17-02-2013, 17:39.

              Comment


              • #8
                Problem gelöst

                Originally posted by h3ll View Post
                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

                Comment

                Working...
                X