Sandra Lill: MySQL (PHP) - Select-Statement dringend gesucht!

Hallo,
ich zermartere mir gerade das Gehirn nach einem Select-Statement (MySQL-Datenbank), das folgendes leisten soll:

Tabelle 1:
id_tab1 (fortlaufende Nummer, UNIQUE, NOT NULL, PRIMARY KEY)
Material (string, NOT NULL)
Breite (double)
Laenge (double)
Hoehe (double)

Tabelle 2:
id_tab1 (id aus Tabelle 1, NOT NULL, PRIMARY KEY)
benutzer (string, NOT NULL, PRIMARY KEY)

Erklärung:
In Tabelle 1 werden verschiedene Materialien mit ihren Eigenschaften gespeichert.
Ein Benutzer hat die Möglichkeit, mehrere Materialien zu markieren. Welche Materialien der Benutzer markiert hat, wird in Tabelle 2 zusammen mit dem Benutzernamen gespeichert. Das heisst in Tabelle 2 kann jede ID und jeder Benutzername beliebig oft vorkommen, allerdings darf die Kombination ID/Benutzer nur einmal vorkommen. Der Primary Key setzt sich also aus zwei Feldern zusammen.

Nun mein Problem:
Ich moechte durch ein Select-Statement alle Datensaetze aus Tabelle 1 angezeigt bekommen (SELECT * FROM Tabelle1;) aber dieses Ergebnis soll so sortiert sein, dass alle Datensaetze, die ein bestimmter Benutzer markiert hat (SELECT id_tab1 FROM Tabelle2 WHERE benutzer='sandra';) am Anfang stehen.

Ich hoffe, ich habe mich einigermaßen klar ausgedrückt.
Bisher habe ich noch keine Lösung für dieses Problem gefunden. Vielleicht kann mir ja ein MySQL-Kenner unter Euch helfen.
Übrigens verarbeite ich die Daten mit PHP. Vielleicht hat ja jemand ein PHP-Workaround parat.

Liebe Gruesse aus Kaiserslautern,
Sandra

PS: Für SQL-Experten, die sich aber nicht mit MySQL auskennen - MySQL unterstützt keine Sub-Selects (falls man das damit lösen könnte)

  1. Hallo,

    ich versuch mich mal mit einem Join:

    SELECT tabelle1.Material, tabelle1.Breite, tabelle1.Laenge, tabelle1.Hoehe
    FROM tabelle1, tabelle2
    WHERE tabelle1.[id_tab1] = tabelle2.[id_tab1] AND tabelle2.benutzer like 'sandra'
    ORDER BY tabelle2.benutzer

    bitte prüfen....

    Viele Grüße, Rolf

    1. Hallo  Rolf,

      SELECT tabelle1.Material, tabelle1.Breite, tabelle1.Laenge, tabelle1.Hoehe
      FROM tabelle1, tabelle2
      WHERE tabelle1.[id_tab1] = tabelle2.[id_tab1] AND tabelle2.benutzer like 'sandra'
      ORDER BY tabelle2.benutzer

      Dein Vorschlag zeigt mir leider nur die von benutzer 'sandra' markierten Datensaetze an.
      Es sollten aber alle Datensaetze angezeigt werden...

      Trotzdem Danke,
      Sandra

      1. Hallo Sandra,

        Dein Vorschlag zeigt mir leider nur die von benutzer 'sandra' markierten Datensaetze an.
        Es sollten aber alle Datensaetze angezeigt werden...

        Alle bekommst Du, wenn Du einfach das "AND tabelle2.benutzer like 'sandra'" wegläßt:

        SELECT tabelle1.Material, tabelle1.Breite, tabelle1.Laenge, tabelle1.Hoehe FROM tabelle1, tabelle2 WHERE tabelle1.[id_tab1] = tabelle2.[id_tab1] ORDER BY tabelle2.benutzer

        Aber ich nehme an, das ist nicht genau das was Du willst, sondern es sollen alle Datensätze ausgegeben werden, und die von 'Sandra' am Anfang? Dann würde ich es so probieren (ungetestet):

        SELECT tabelle1.Material, tabelle1.Breite, tabelle1.Laenge, tabelle1.Hoehe, (tabelle2.benutzer LIKE 'Sandra') AS ordnung FROM tabelle1, tabelle2 WHERE tabelle1.[id_tab1] = tabelle2.[id_tab1] ORDER BY ordnung DESC

        zur Erläuterung: LIKE liefert 1(TRUE) zurück, wenn der Benutzername identisch mit dem angegebenen ist, sonst 0 (FALSE), wenn Du also in umgekehrter Richtung nach diesem Vergleich sortieren läßt, solltest Du alle 'Sandra'-Datensätze am Anfang kriegen, und dann den Rest.

        Viele Grüße
        Stephan