Volker Nebelung: Passende WHERE-Klausel für MySQL-Abfrage?

Hallo,

ich habe eine Datenbanktabelle mit folgenden Spalten:
id, merkmal1, merkmal2

Nun will ich in PHP eine Abfrage für merkmal1 starten:
mysql_query ("SELECT merkmal1 FROM tabelle")
Zusatzbedingung: der jeweilige Datensatz soll aber nur dann ausgewählt werden, falls merkmal1 von all seinen Vorgängern verschieden ist.
Klar, in PHP einfach: Ich packe die Ergebnisse obiger Abfrage in ein Array und lasse array_unique() drüberlaufen.

Gibt es eine Möglichkeit mittels WHERE - Klausel diese Abfrage direkt in MySQL zu regeln?
Durchforsten der Dokumentation half mir nicht weiter.

Danke im Voraus für Hilfe.

Gruß, Volker

  1. Ahoi Volker Nebelung,

    ich verstehe nicht ganz dein problem, aber vll hilft dir ein blick in

    http://dev.mysql.com/doc/refman/4.1/en/select.html

    weiter, besonderes augenmerk sollte dabei GROUP BY haben

    http://dev.mysql.com/doc/refman/4.1/en/group-by-modifiers.html

    MfG

  2. Hallo,

    hi

    Gibt es eine Möglichkeit mittels WHERE - Klausel diese Abfrage direkt in MySQL zu regeln?

    SELECT merkmal1 FROM tabelle GROUP BY merkmal1

    1. SELECT merkmal1 FROM tabelle GROUP BY merkmal1

      Sorgt GRUP BY nicht lediglich für eine Gruppierung der Ergebnisse und nicht für die Sicherstellung, dass merkmal1 auch nur einmal ausgwählt wurde?

      Gruß, Volker

      1. hi,

        SELECT merkmal1 FROM tabelle GROUP BY merkmal1

        Sorgt GRUP BY nicht lediglich für eine Gruppierung der Ergebnisse und nicht für die Sicherstellung, dass merkmal1 auch nur einmal ausgwählt wurde?

        GROUP BY liefert dir für jeden eindeutigen Wert in der dahinter angegebenen Spalte bzw. Spaltenkombination genau einen Ergebnisdatensatz.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. GROUP BY liefert dir für jeden eindeutigen Wert in der dahinter angegebenen Spalte bzw. Spaltenkombination genau einen Ergebnisdatensatz.

          Dann hab ich GROUP BY falsch verstanden.
          Danke.

          Gruß, Volker

  3. hi,

    Zusatzbedingung: der jeweilige Datensatz soll aber nur dann ausgewählt werden, falls merkmal1 von all seinen Vorgängern verschieden ist.

    Definiere: "Vorgänger"

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Definiere: "Vorgänger"

      Vielleicht etwas holprig ausgedrückt, das stimmt. Anders: Ist merkmal1 in Datensatz x1 durch SELECT ausgewählt worden, dürfen Datensätze mit identischem merkmal1 nicht mehr ausgewählt werden.
      Ich will also nur eine Übersicht, _welche_ merkmal1 es in der Tabelle gibt, aber nicht alle Datensätze selektieren und dann doppelte Einträge schließlich per PHP rauswerfen.

      Gruß, Volker

      1. Ahoi Volker Nebelung,

        Ich will also nur eine Übersicht, _welche_ merkmal1 es in der Tabelle gibt, aber nicht alle Datensätze selektieren und dann doppelte Einträge schließlich per PHP rauswerfen.

        Schonmal daran gedacht eine Merkmal-Tabelle in der DB anzulegen? dort hättest du definitiv jedes Merkmal nur einmal und könntest diese über die ID den Einträgen zuordnen.

        MfG

        1. Schonmal daran gedacht eine Merkmal-Tabelle in der DB anzulegen? dort hättest du definitiv jedes Merkmal nur einmal und könntest diese über die ID den Einträgen zuordnen.

          Hm, noch eine solche Tabelle wäre unpraktikabel.
          Hintergrund: merkmal1 bezeichnet einen Ordner, merkmal2 einen Dateinamen.
          Mit Auswählen von merkmal1 will ich also eine Übersicht gewinnen, welche Ordner genutzt werden.
          Im Prinzip _ist_ das also schon die merkmaltabelle.

          Gruß, Volker

      2. Hallo Volker,

        Ich will also nur eine Übersicht, _welche_ merkmal1 es in der Tabelle gibt, aber nicht alle Datensätze selektieren und dann doppelte Einträge schließlich per PHP rauswerfen.

        es gibt die Option DISTINCT:

        SELECT DISTINCT  
            merkmal1  
        FROM tabelle
        

        Die bereits erwähnte Verwendung der GROUP-BY-Klausel führt zum gleichen Resultat.

        Freundliche Grüße

        Vinzenz