Problem bei abfrage von DB daten mittels join

  • moin,
    hoffe mir kann hier jemand weiterhelfen, auch wenn bei diesem sub forum nicht explizit mysql aufgeführt ist
    das Problem ist folgendes:
    ich habe in der mysql Datenbank Daten, die ich aus 3 Tabellen auslesen muss, und dann in PHP in einer Tabelle anzeigen lassen will.
    Leider bekomm ich durch einen join nicht das gewünschte Ergebnis.
    Ich hatte Testweise mal einen join mit nur zwei tabellen probiert, was genaus wenig funktionierte:


    ich hatte halt Testweise mal nur 2 Tabellen im join reingenommen,das Problem ist, dass bei der Ausgabe das ganze 8x ausgegeben wird
    das sieht dann so aus:


    obwohl eigentlich nur

    Code
    Bandname
    ghjfvghj
    4576467
    dfghfg
    fghdcfg
    dfgsd
    dfgsd


    ausgegeben werden sollte
    Da ich nicht so recht wusste wo da das Problem liegt hatte ich versucht den join zu umgehen, und das ganze in eine temp table einzutragen, die ich dann ja auslesen könnte. Ich hatte dafrü dann zum Testen mal einen Datensatz genommen:

    Code
    $i=0;
    while($i < count($array_sum)) {
    
    
    	$result2	=	"INSERT INTO temp_ausgabe(BAND_NAME) VALUES('$dump')";
    	$dump		=	$array_sum[$i];
    	mysqli_query($con,$result2);
    	$i++;
    }


    $array_sum beinhaltet hierbei die werte aus BAND_NAME
    wenn ich den array über echo und ne for schleife ausgeben lasse ist das alles auch ok, sobald ich ihn allerdings wie im codeschnipsel oben in die DB eintrage erhalte ich jedesmal einen leeren Datensatz vor den andern Datensätzen
    also ich bin da so langsam ratlos...
    wär Klasse, wenn jemand das Problem sieht, manchmal sieht man ja den Wald vor Bäumen nichtmehr.
    mfg ein ratloser Sukkubus

  • moin
    das Problem daran wäre aber, dass die IDs in beiden Tabellen ja nicht identisch sind
    d.h. es würden so dann Datensätze verloren gehen :/
    In der Tabelle tbl_rezensionen_bands hab ich ja ganz andere IDs als in der Tabelle tbl_rezensionen_produkte, da muss es doch noch eine andere Möglichkeit geben das zu lösen ?

  • moin,
    also das hat sich nun grade geändert,es sindnun 5 Tabellen zum joinen ~~
    2 Tabellen konnte ich nu joinen über eine ID, die in einer Tabelle als PK vorliegt, in der andern als FK.


    das funktioniert so auch für 2 andere Tabellen, die beide wieder einen Schlüssel als Bezug haben.
    Sobald ich allerdings versuche 4 Tabellen in einem Select zu joinen werden mir wieder Daten doppelt ausgegeben:


    Kann ich daraus nun schliessen, dass damit es funktioniert JEDE Tabelle einen Bezug zu JEDER anderen haben muss ?
    Die Tabellen haben Relationen, allerdings nicht jede Tabelle zu jeder

    Code
    tbl_rezensionen_produkte n:1 tbl_rezensionen_bands
    tbl_rezensionen_produkte 1:1 tbl_rezensionen
    tbl_rezensionen_produkte 1:n tbl_rezensionen_bewertung
    tbl_rezensionen          n:1 tbl_mitarbeiter
    tbl_mitarbeiter          1:n tbl_rezensionen_bewertung
  • kannst du bitten ein ausführliches ER Modell dalegen und dann genau welche daten in welcher form ausgegeben werden sollen, ich raffe leider immer noch nicht was du überhaupt vor hast. welche daten du wie haben willst und vorallem wiso mit JOIN ??? wisst du jetzt wirklich nen JOIN oder einfach nur ne abfrage über mehrere Tabellen??

  • moin
    najut, dann werd ich das ERM hier noch reinstellen
    Ich will die Daten in einer Tabelle ausgeben lassen
    also z.B:
    while($row=mysql_fetch_assoc($result_query) {
    echo"<td>{$row[column]}</td>\n";
    usw.
    }
    dafür muss ich das ja vorher in einer abfrage zusammengefasst haben
    So ich mache gleich ma screenshot vom ERM und editiere den dann rein, bzw poste es drunter, je nachdem was das Forum mitmacht

    hier dann das ERM:
    [Blockierte Grafik: http://img42.imageshack.us/img42/8462/erm6tv.jpg]

  • Ich konnte es zwar nicht testen, aber bin mir zimlich sicher das es stimmt, da es ja eigentlich ne einfache Abfrage ist:

    SQL
    SELECT A.BAND_ID, A.PROD_BEZEICHNUNG, A.PROD_ID, B.BAND_NAME, C.REZ_DATUM, D.BEW_URTEIL FROM `tbl_rezensionen_produkte` AS A, `tbl_rezensionen_bands` AS B, `tbl_rezensionen` AS C, `tbl_rezensionen_bewertung` AS D WHERE A.BAND_ID=B.BAND_ID AND A.PROD_ID=C.PROD_ID AND A.PROD_ID=D.PROD_ID;
  • moin,
    spielt es nun bei den Relationen für die joins eine Rolle wie diese angelegt sind ?
    Du hast ja A:B A:C A:D
    Damit hast du ja die Tabellen mit ihren Alias B C D alle an A gebunden
    Wenn das nur so geht, dass alle auf eine bestimmte Tabelle bezogen werden müssen würde ich ja scheitern, wenn ich die Mitarbeiter Tabelle mit
    Where E.MA_ID = C:MA_ID
    anbinden will, oder ?
    das wäre dann ja das gleiche, was ich auch schon oben hatte
    Das heisst ich müsste dann noch die MA_ID in die tbl_rezensionen_produkte übernehmen, damit es funktioniert ?
    danke schonmal soweit für deine Hilfe, konnte die Abfrage nochnicht testen, werd ich aber mal nachher machen ;)

  • ein, mann muss nicht bei einer abfrage alle tabs mit einer verbinden.

    du hast aber einen fehelr in deriner DB struktur, du hast gegen die 2te normalisierungsform verstoßen.

    du hast redundanzen, da ja in D keine PROD_ID von nöten ist. kann es zu problemen kommen, muß aber nicht, wenn sonst alles ordnungsgemäß ist.

    Mach sonst nochmal einen Vorschlag für ne abfrage, die deiner meinung nach nicht gehen sollte.

  • moin,
    mag sein, dass es so vielleicht nicht 100% sauber ist, aber zu Problemen wird es dadurch wohl nicht kommen, da ich den FK PROD_ID ja bei Update, Insert etc mit einbeziehe
    Kannst es Faulheit nennen den FK PROD_ID dort zu haben, ansonsten müsste ich dafür nochmal über die MA_ID der Tabelle tbl_mitarbeiter gehn und dann nochmal über FK PROD_ID der Tabelle tbl_rezensionen...
    ansonsten hab ich im mom keine Probleme mit joins, fuktioniert alles soweit ;)