MySQL (PHP) - Select-Statement dringend gesucht!
Sandra Lill
- datenbank
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)
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
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
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