Antworten auf deine Fragen:
Neues Thema erstellen

SQL-Abfrage mit JOIN

Kerstin77

Flashfan

Hallo,

krieg grad eine Select-Abfrage nicht zusammen, vielleicht kann mir jemand helfen?

PHP:
$sql = "SELECT `startzeit`, `endzeit`, `status`, `name`, `vorname`, `projektname`, `betreuer_id`
FROM `verleih`, `benutzer`, `projekte`
WHERE `verleih`.`benutzer_id` = `benutzer`.`id_benutzer`
AND `verleih`.`projekt_id` = `projekte`.`id_projekt`
AND `verleih`.`geraet_id` = $geraet_id;";
$ergebnis = mysql_query($sql);
Das klappt ja soweit schon, nur möchte ich jetzt anstelle der Betreuer-ID den Namen haben...

Die Tabellen sind wie folgt aufgebaut (wobei betreuer_id einfach nur eine andere Bezeichnung für die BenutzerID ist):

verleih
----------
id_verleih
geraet_id
benutzer_id
projekt_id
startzeit
endzeit
status


projekte
----------
id_projekt
projektname
betreuer_id

benutzer
----------
id_benutzer
name
vorname


Muß ich da mit JOIN arbeiten? Das hab ich noch nie so wirklich verstanden :uhm:

Vielen Dank schomal!

Kerstin
 
Zuletzt bearbeitet:

Duddle

Posting-Frequenz: 14µHz

AW: SQL-Abfrage mit JOIN

Wenn ich das richtig sehe, hast du alle 3 Tabellen schon verknüpft und holst dir auch schon alles. Es müssten nun schon name und vorname verfügbar sein.

Wie gibst du das Ergebnis aus?


Übrigens: dein einfaches Kreuzprodukt (Angabe der 3 Tabellen per Komma getrennt) führt bei größeren Tabellen zu sehr schlechter Performance (Bsp.: jeweils 300 Datensätze führen zu einer Zwischentabelle mit 27 Mio. (=300³) Einträgen). Eine richtige JOIN-Anweisung wird intern (je nach DBMS) anders und schneller verarbeitet.


Duddle
 

pac_nrw

Nicht mehr ganz neu hier

AW: SQL-Abfrage mit JOIN

Versuch es mal so:
PHP:
$sql = "SELECT `verleih.startzeit`, `verleih.endzeit`, `verleih.status`,
 `benutzer.name`, `benutzer.vorname`, `projekt.projektname`, `projekt.betreuer_id`
FROM `verleih`
INNER JOIN 'projekte' ON projekt.id_projekt=verleih.projekt_id
INNER JOIN 'benutzer' ON 'benutzer.id_benutzer;";
Für die richtigkeit kann ich jetzt nicht Garantieren aber ich hoffe das Prinzip hast du so verstanden.

mfg
 

SpieleHolger

Nicht mehr ganz neu hier

AW: SQL-Abfrage mit JOIN

Ich nehme an, dass der Benutzer eines Verleihs nichts mit dem Betreuer des Projekts zu tun hat, aber beide in der Tabelle benutzer gespeichert sind.
Deshalb brauchst Du einen weiteren Join zwischen Projekt und Benutzer. Dazu vergibst Du am besten Alias-Namen für die Tabellen. Pseudo-Code nur für das SQL:

PHP:
SELECT
    v.startzeit, v.endzeit, v.status,
    ben.name, ben.vorname,
    p.projektname,
    bet.name AS betName,
    bet.vorname AS betVorname
FROM
    verleih AS v

INNER JOIN
    benutzer AS ben
ON
    v.benutzer_id = ben.id_benutzer

INNER JOIN
    projekte AS p
ON
    v.projekt_id = p.id_projekt

INNER JOIN
    benutzer AS bet
ON
    p.betreuer_id = bet.id_benutzer

WHERE
    v.geraet_id = $geraet_id
@Duddle: Eine "vernünftige" Datenbank optimiert die Abfrage so, dass das Ergebnis das gleiche ist. Mag sein, dass mysql da pfuscht...
 

Kerstin77

Flashfan

AW: SQL-Abfrage mit JOIN

Perfekt, genau so meinte ich es. Alle Namen (egal ob nun Betreuer oder "normaler" Benutzer) sind in der Tabelle benutzer gespeichert. Mit der Abfrage möchte ich wissen, wer ein bestimmtes Gerät reserviert hat, auf welches Projekt das Gerät reserviert ist und wer der Projektbetreuer ist.

Vielen Dank!

Kerstin
 

Kerstin77

Flashfan

AW: SQL-Abfrage mit JOIN

Jetzt hab ich leider doch noch ein Problem. Und zwar wollte ich Vor- und Nachname in der SQL-Abfrage direkt verbinden mit CONCAT. Gebe ich die SQL-Anweisung direkt in phpMyAdmin ein, läuft alles problemlos. Sobald ich aber die Anweisung im PHP-Skript ausführe, gibt's ne Fehlermeldung.

SQL:
PHP:
SELECT v.startzeit, v.endzeit, v.status, CONCAT(ben.name, ", ", ben.vorname) AS benutzer, p.projektname, CONCAT(bet.name, ", ", bet.vorname) AS betreuer
FROM verleih AS v
INNER JOIN benutzer AS ben ON v.benutzer_id = ben.id_benutzer
INNER JOIN projekte AS p ON v.projekt_id = p.id_projekt
INNER JOIN benutzer AS bet ON p.betreuer_id = bet.id_benutzer
WHERE v.geraet_id = $geraet_id;
Fehlermeldung:
Parse error: syntax error, unexpected ',' in D:\xampp\htdocs\dev\...\read_geraeteverleih.php on line 37
Zeile 37 ist die mit dem CONCAT.

Kerstin


EDIT: erledigt - man sollte die Anführungszeichen auch escapen :kopfpatsch:
 
Zuletzt bearbeitet:

SpieleHolger

Nicht mehr ganz neu hier

AW: SQL-Abfrage mit JOIN

Huch, warum willst Du denn String den mitten im SQL unterbrechen? Einfach:

PHP:
CONCAT(ben.name, ben.vorname) AS benutzer

EDIT: Ach so, Du wolltest noch ein ", " mit einfügen, aber das hast Du ja schon hinbekommen.
 
Zuletzt bearbeitet:
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.614
Beiträge
1.538.351
Mitglieder
67.525
Neuestes Mitglied
mgtaucher
Oben