PHP Inner Join Problem

06/09/2015 10:41 DasPrinzip.#1
Hallo,

und zwar habe ich folgendes Problem.
Ich habe 3 Tabellen, welche in Verbindung stehen.

Kunde, Auftrag, Adresse

Bei der Tabelle Kunde ist die Kundennummer der Primärschlüssel. Bei Auftrag gibt es dazu einen Fremdschlüssel. Jetzt möchte ich z.B. das jemand seine Kundennummer eingibt und seine Aufträge anzeigt. Dazu hab ich folgenden Code:

PHP Code:
if (isset ($_POST['submit'])){
        
        
mysql_connect("*""*","*") or die ("Keine Verbindung moeglich");
        
mysql_select_db("*"/* Datenbank verändern */ or die ("Die Datenbank existiert nicht.");
        
#header("Content-Type: text/html; charset=utf-8");
        
mysql_query("SET NAMES 'utf8'");    
        
        
$kdnr $_POST['kdnr'];
        
        
$sql "SELECT * FROM cp_kunde JOIN cp_atg ON atg_kdnr = $kdnr";
 
        
$db_erg mysql_query$sql );
        if ( ! 
$db_erg )
        {
          die(
'Ungültige Abfrage: ' mysql_error());
        }
        
        echo 
'<table cellpadding="4" cellspacing="0" border="1">';
        echo 
'<tr>
            <td><strong>Kundennummer</strong></td>
            <td><strong>Vorname</strong></td>
            <td><strong>Nachname</strong></td>
            <td><strong>Titel</strong></td>
            <td><strong>Beschreibung</strong></td>
            </tr>'
;
        while (
$zeile mysql_fetch_array$db_ergMYSQL_ASSOC))
        {
          echo 
"<tr>";
          echo 
"<td>"$zeile['kdnr'] . "</td>";
          echo 
"<td>"$zeile['vorname'] . "</td>";
          echo 
"<td>"$zeile['nachname'] . "</td>";
          echo 
"<td>"$zeile['atg_title'] . "</td>";
          echo 
"<td>"$zeile['atg_desc'] . "</td>";
          echo 
"</tr>";
        }
        echo 
"</table>";
        
mysql_free_result$db_erg );
    } 
Nun ich das Problem, dass wenn ich eine Kundennummer eingebe, alle Kunden ausgegeben werden und dahinter ein Auftrag mit der eingegebenen Kundennummer?
Was ist der Fehler?
06/09/2015 11:07 Devsome#2
Warum ein InnerJoin wenn ihr ein 'select where select' gehen sollte.

Weiß grad nicht ob das so gehen würde, aber so in der Art
Code:
$sql = "SELECT * FROM cp_kunde WHERE (SELECT * FROM cp_atg WHERE atg_kdnr = $kdnr)";
06/09/2015 11:10 adistoe#3
PHP Code:
$sql "SELECT * FROM cp_kunde AS ck JOIN cp_atg AS ca ON ck.atg_kdnr = ca.atg_kdnr WHERE atg_kdnr = $kdnr"
Du musst sagen, wo du die Tabellen verbindest und welche Spalten du ausgeben möchtest.

ck.atg_kdnr müsste in deinem Falle der Primärschlüssel von cp_kunde sein.
ca.atg_kdnr hingegen ist der Fremdschlüssel von cp_atg.

Gegebenfalls Name des Schlüssels hinter ck. bzw. ca. anpassen.

#edit:
@Devsome:
Richtig wäre:
PHP Code:
$sql "SELECT * FROM cp_kunde WHERE spaltenname = (SELECT * FROM cp_atg WHERE atg_kdnr = $kdnr)"
Sonst hast du keine richtige WHERE Bedingung.
Bei deinem Statement würde Bsp. "WHERE 1" rauskommen.
06/09/2015 11:16 Devsome#4
Quote:
Originally Posted by adistoe View Post
PHP Code:
$sql "SELECT * FROM cp_kunde AS ck JOIN cp_atg AS ca ON ck.atg_kdnr = ca.atg_kdnr WHERE atg_kdnr = $kdnr"
Du musst sagen, wo du die Tabellen verbindest und welche Spalten du ausgeben möchtest.

ck.atg_kdnr müsste in deinem Falle der Primärschlüssel von cp_kunde sein.
ca.atg_kdnr hingegen ist der Fremdschlüssel von cp_atg.

Gegebenfalls Name des Schlüssels hinter ck. bzw. ca. anpassen.

#edit:
@Devsome:
Richtig wäre:
PHP Code:
$sql "SELECT * FROM cp_kunde WHERE spaltenname = (SELECT * FROM cp_atg WHERE atg_kdnr = $kdnr)"
Sonst hast du keine richtige WHERE Bedingung.
Bei deinem Statement würde Bsp. "WHERE 1" rauskommen.
Man könnte sofern es mehr Einträge geben sollte dann ein IN anstatt = nehmen.
Aber ich wusste das ich was vergessen habe :c
06/09/2015 11:44 DasPrinzip.#5
Quote:
Originally Posted by adistoe View Post
PHP Code:
$sql "SELECT * FROM cp_kunde AS ck JOIN cp_atg AS ca ON ck.atg_kdnr = ca.atg_kdnr WHERE atg_kdnr = $kdnr"
Du musst sagen, wo du die Tabellen verbindest und welche Spalten du ausgeben möchtest.

ck.atg_kdnr müsste in deinem Falle der Primärschlüssel von cp_kunde sein.
ca.atg_kdnr hingegen ist der Fremdschlüssel von cp_atg.

Gegebenfalls Name des Schlüssels hinter ck. bzw. ca. anpassen.

#edit:
@Devsome:
Richtig wäre:
PHP Code:
$sql "SELECT * FROM cp_kunde WHERE spaltenname = (SELECT * FROM cp_atg WHERE atg_kdnr = $kdnr)"
Sonst hast du keine richtige WHERE Bedingung.
Bei deinem Statement würde Bsp. "WHERE 1" rauskommen.
Danke, das haben wir genau so in der Schule gelernt, aber hab das total vergessen...
06/09/2015 18:18 snow#6
#closed (on request)