2017-03-19 2 views
-11

Ich arbeite an einem Computerprojekt und wurde gebeten, eine Join-Abfrage zu verwenden, um Informationen aus zwei verschiedenen Tabellen abzurufen. Ich möchte alle Werte aus einer einzelnen Zeile in beiden Tabellen erhalten. Ich verwende eine eindeutige ID, um jede Zeile zu identifizieren.Welchen Join sollte ich mit MySQL verwenden?

Ich habe bereits existierende Beispiele betrachtet, aber sie scheinen und ein wenig verwirrend/antworten nicht, was ich versuche zu tun.

+4

Sie nicht 'mysql_ *' Funktionen in neuen Code verwenden sollten. Lernen Sie PDO oder MySQLi und wie Sie parametrisierte Abfragen verwenden. – Qirel

Antwort

1

Es gibt ein paar kleine Fehler in Ihrer Abfrage. Im 'Von' Abschnitt müssen Sie nur die erste Tabelle verwenden, und Sie müssen dem Join mitteilen, welches Feld aus der ersten Tabelle mit welchem ​​Feld in der zweiten Tabelle übereinstimmt. In der, wo werden Sie nur ein Feld passen müssen $savingsId

Diese Abfrage wahrscheinlich funktionieren sollte:

SELECT Savings_Allocation.Bank,Savings_Allocation.TotalAmt,Savings_Allocation.Interest,Savings.Type,Savings.Access 
FROM Savings_Allocation 
INNER JOIN Savings ON Savings.savingsId = Savings_Allocation.savingsId 
WHERE Savings.savingsId = '$savingsId' 

Nun ist die Abfrage oben hat einen letzten Fehler: eine Variable innerhalb einer Abfragezeichenfolge verwendet, ist unsicher und macht die Abfrage anfällig für SQL-Injection. Bitte lesen Sie PHP's guide on SQL injection, um eine sichere Abfrage durchzuführen. Und verwenden Sie nicht mysql_query, da es seit php 5.5 veraltet ist und sogar in PHP 7 entfernt wurde. Es wird empfohlen, stattdessen mysqli oder PDO zu verwenden.

0

Hier sind alle möglichen Abfragen auf den beiden Tabellen, Studenten und Zahlung.

students name  id id_student datepayment 
1   Lisa   1 1  2017-01-01 
2      2 1  2017-02-03 
3   Asher  3 2  2017-03-05 
4   Lee   4 1  2017-03-03 

Die Abfrage

select students.name, payment.datepayment 
FROM students, payment 
where students.id_student = payment.id_student; 

wird dieses Ergebnis geben - alle Namen der Schüler, die in der Tabelle Zahlungs

name datepayment 
Lisa 2017-01-01 
Lisa 2017-02-03 
Lisa 2017-03-03 
     2017-03-05 

Die Abfrage

SELECT s.name, p.datepayment 
FROM 
students s 
LEFT OUTER JOIN payment p ON s.id_student = p.id_student; 

gibt dieses Ergebnis id_student haben : Alles Gestüt ents Namen aus der linken Tabelle (Studenten), die nicht in der Tabelle Zahlung hat oder id_student:

name datepayment 
Lisa 2017-01-01 
Lisa 2017-02-03 
     2017-03-05 
Lisa 2017-03-03 
Asher  NULL 
Lee   NULL 

Die Abfrage

SELECT s.name, p.datepayment 
FROM 
students s 
RIGHT OUTER JOIN payment p ON s.id_student = p.id_student; 

wird dieses Ergebnis geben - alles aus RIGHT Tabelle Zahlung und nur Studenten Namen, die

name datepayment 
Lisa 2017-01-01 
Lisa 2017-02-03 
     2017-03-05 
Lisa 2017-03-03 

Die Abfrage

SELECT s.name, p.datepayment 
FROM 
students s 
INNER JOIN payment p ON s.id_student = p.id_student; 
0123: in Tabelle Zahlung haben id_student

wird dieses Ergebnis geben - alle Schüler Namen, die in der Tabelle Zahlungs id_student haben:

name datepayment 
Lisa 2017-01-01 
Lisa 2017-02-03 
Lisa 2017-03-03 
     2017-03-05 
Verwandte Themen