Abfrage von Daten mit Primärschlüssel aus Spalte
Maresa
- datenbank
Hallo,
ich habe eine MySql Datenbank mit einer Tabelle USER mit der Spalte "berechtigung". In berechtigung stehen Primärschlüssel einer anderen Tabelle PROJEKTE, per Komma getrennt, drin.
Ich möchte nun alle Daten aus "projekte abfragen" bei welchem der Primärschlüssel mit den Werten aus "berechtigung" übereinstimmt.
Bspl.
Tabelle USER
nachname | berechtigung
------------------------
müller 1,3
schwarz 2,4,5
Tabelle PROJEKTE
id | projektname
-----------------
1 projekt1
2 projekt2
3 projekt3
4 projekt4
5 projekt5
6 projekt6
Wie kann ich nun die Abfrage gestalten? Erstmal muss ich die Daten aus "berechtigung" ja irgendwie trennen. Ich dachte mir, in ein Array einlesen.
Wie frage ich aber nun in einer SQL Abfrage alle Datensätze ab, die den Primärschlüsseln entsprechen?
Wie würdet Ihr das lösen?
Vielen Dank
Maresa
Wie würdet Ihr das lösen?
Also ich würde eine weitere Tabelle einführen, da das so ein schlechtes Datenbank Modell ist.
BERECHTIGUNG
USER | PROJEKT_ID
müller 3
müller 1
schwarz 2
schwarz 4
schwarz 5
und dann mit
SELECT P.PROJEKTNAME FROM PROJEKTE P, USER U, BERECHTIGUNG B WHERE P.ID=B.PROJEKT_ID AND B.USER = U.nachname
alle Projekte holen, die zu den entsprechenden Berechtigungen gehören
MfG
Jonas Tampier
Hallo,
vielen Dank! Ich hab die Tabellen nun so angelegt.
Mit der SQL Abfrage komme ich aber nicht zurecht...
SELECT P.PROJEKTNAME FROM PROJEKTE P, USER U, BERECHTIGUNG B WHERE P.ID=B.PROJEKT_ID AND B.USER = U.nachname
Was bedeutet das P. und P und U und B ?
Ich hab eine Tabelle angelegt, welche berechtigungen heisst -> sie hat 2 Spalten "user" und "projekte" in der jeweils die IDs aus den Tabellen der User Übersicht und der Projektübersicht gepseichert werden sollen.
Wie bekomme ich nun den Namen der Projekte eines Users?
Vielen Dank
Maresa
SELECT P.PROJEKTNAME FROM PROJEKTE P, USER U, BERECHTIGUNG B WHERE P.ID=B.PROJEKT_ID AND B.USER = U.nachname
Was bedeutet das P. und P und U und B ?
Das sind Aliasnamen, damit ich die Tabellennamen nicht immer ausschreiben muss :)
Wie bekomme ich nun den Namen der Projekte eines Users?
Das sollte der select eigentlich bewerkstelligen
SELECT P.PROJEKTNAME FROM PROJEKTE P, USER U, BERECHTIGUNG B WHERE P.ID=B.PROJEKT_ID AND B.USER = U.nachname
Wie bekomme ich nun den Namen der Projekte eines Users?
Das sollte der select eigentlich bewerkstelligen
hmm.. irgendwie bekomme ich die sql abfrage nicht auf die reihe.
es kommt immer die fehermeldung "Unknown column 'projekte' in 'field list'"
ich hab nun eine tabelle berechtigunen mit 2 spalten erstellt: user_id und projekt_id
ausserdem gibt es die tabelle projekte mit projektID und projektname
die ID des users kommt aus einer session: $HTTP_SESSION_VARS["userID"]
kannst du mir nochmals helfen?
Hallo Maresa,
wenn Du folgende Tabellen hast:
table a(id int, name varchar(20));
VALUES (1 , 'Mueller');
VALUES (2 , 'Schaefer');
table b(id int, projekt varchar(20));
VALUES (1 , 'HTML');
VALUES (2 , 'PHP');
table c(id_a int, id_b int));
VALUES (1 , 1);
VALUES (1 , 2);
dann probier mal eine anweisung wie diese:
select projekt from a,b,c where b.id=c.id_b and a.name = 'Mueller';
das sollte herauskommen:
+---------+
| projekt |
+---------+
| HTML |
| PHP |
+---------+
Hallo Maresa,
sorry, war nur die halbe Wahrheit:
select projekt from a,b,c where a.name = 'Mueller' and b.id=c.id_b and a.id = c.id_a;
das sollte aber nun das erwünschte Ergebnis bringen
Gruss
annA
Hallo Maresa,
falls Du die Struktur der Datenbank noch ändern kannst, Du dies.
Hierfür solltest Du Dich ein bisschen mit Datenbankstrukturen
beschäftigen. Stichwort: Normalisierung von Datenbanken/Tabellen.
In der Regel würde man solch eine Datenbank wie Du sie beschreibst so aufbauen:
id | nachname
1 | müller
2 | schwarz
id | projektname
-----------------
1 projekt1
2 projekt2
3 projekt3
4 projekt4
5 projekt5
6 projekt6
koppeltabelle:
id_nachname | id_projekt
1 | 1
1 | 3
2 | 2
2 | 4
2 | 5
Diese Art der Umsetzung kostet zwar mehr Speicher und auch die
Selects werden komplexer, es ist aber leichter zu warten, leichter
erweiterbar etc.
Viele Grüße
annA