mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 29.03.2024 12:37 Benutzername: Passwort: Auto-Login

Thema: Probleme mit Daten aus 3 Tabellen auszulesen... vom 19.12.2005


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> Probleme mit Daten aus 3 Tabellen auszulesen...
Autor Nachricht
Lapje
Threadersteller

Dabei seit: 17.06.2003
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Mo 19.12.2005 22:53
Titel

Probleme mit Daten aus 3 Tabellen auszulesen...

Antworten mit Zitat Zum Seitenanfang

Hai Leutz...

Leider war der Text für die Überschrift zu lange...*zwinker*

Also...folgendes Problem:

Ich habe ein Eingabeformular erstellt, in dem der User zum einen Daten eingeben, und vorgefertigte Daten aus einem DropDown-Menü wählen kann (Fehlerverminderung), die aus anderen Datenbanken ausgelesen werden. .

Das ganze könnt ihr euch > hier < anschauen. Die Felder um die es geht sind:

dozenten: dozent_id, dozent_vorname, dozent_name
kurs_kat: kurs_kat_id, kurs_kat
kursbeschreibung: kurs_beschreibung_id, kurs_name_kurz

(das komplette ER-Diagramm könnt ihr euch > hier < anschauen...vielleicht hilft es ja....)


Das Problem ist nun das ich im mom noch für jedes DropDown eine eigene Datenbankabfrage mache. Anders habe ich das ganze nicht zum laufen bekommen. Ich habe es schon mit Joins probiert und auch so rumgeknobelt. Das ganze funktionierte auch soweit, nur habe ich die Daten in den DD's doppelt und dreifach ausgegeben bekommen, auch DISTINCT hat da nichts mehr geholfen...

Hat zufällig jemand eine Idee was ich da machen könnte ???

Ich hefte euch den Code mal an...

besten dank

Lapje

Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>kurs_eingabe</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>



<?php
   // Kontrolle ob kein leeres Formular gesendet wurde
   if (isset($gesendet))
   {

      // mit Datenbank verbinden
      mysql_connect();
      mysql_select_db("schulungen");
      
      // Einfügen der Datensätze für Kurse
      $mysql_eingabe = "INSERT kurse";
      $mysql_eingabe .= "(kurs_name, kurs_kat_id, kurs_anfang, kurs_ende, kurs_anmeldeschluss, kurs_zeiten, kurs_gebuehr, kurs_bemerkung, kurs_beschreibung_id, kurs_dozent_id)";
      $mysql_eingabe .= "VALUES ('$kurs_name', '$kurs_kat_id_send', '$kurs_anfang', '$kurs_ende', '$kurs_anmeldeschluss', '$kurs_zeiten', '$kurs_gebuehr', '$kurs_bemerkung', '$kurs_beschreibung_id_send', '$kurs_dozent_id_send')";
      
      mysql_query($mysql_eingabe);
      
      $num = mysql_affected_rows();
      
      // Ausgabe ob Datensatz hinzugefügt wurde    
      if ($num>0)
         {
         
         echo "1 Datensatz wurde hinzugefügt<br><br>";
         }
      else
         echo "Ein Fehler ist aufgetreten.<br><br>";
      }
      
?>
      
      
   
      
   
<!-- Formular -->
<p>Bitte geben Sie einen vollständigen Datensatz ein: </p>
<form action="kurs_eingabe.php" method="post">
<table width="100%"  border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="21%">Kursname:</td>
    <td width="79%"><input name="kurs_name" size="50"></td>
  </tr>
  <tr>
    <td>
   
   
   <?php
   
      // Verbindung mit Datenbank herstellen
      mysql_connect();
      mysql_select_db("schulungen");
      
      // Abfrage kurs_kat
      $mysql_abfrage  = "SELECT DISTINCT kurs_kat, kurs_kat_id FROM kurs_kat ORDER BY kurs_kat";
      
      $mysql_ergebnis=mysql_query($mysql_abfrage);
      
      
      $num = mysql_num_rows($mysql_ergebnis);
            
      mysql_close();
      
   ?>
Kurs-Kategorie:</td>

    <td>      <select name="kurs_kat_id_send">
       
   <?php
   
      // Ausgabe Daten Tabelle kurs_kat
      while ($datensatz = mysql_fetch_assoc($mysql_ergebnis))
      {
               echo "<option value='" . $datensatz["kurs_kat_id"] . "'>" . $datensatz["kurs_kat"] . "</option>";            
      }
   ?>
     
     <!-- Eingabeformular -->
     </select></td>
  </tr>
  <tr>
    <td>Kurs-Anfang:</td>
    <td><input name="kurs_anfang" size="50"></td>
  </tr>
  <tr>
    <td>Kurs-Ende:</td>
    <td><input name="kurs_ende" size="50"></td>
  </tr>
  <tr>
    <td>Kurs-Anmeldeschluss:</td>
    <td><input name="kurs_anmeldeschluss" size="50"></td>
  </tr>
  <tr>
    <td>Kurs-Zeiten:</td>
    <td><input name="kurs_zeiten" size="50"></td>
  </tr>
  <tr>
    <td>Kurs-Gebühr:</td>
    <td><input name="kurs_gebuehr" size="50"></td>
  </tr>
  <tr>
    <td>Kurs-Bemerkung:</td>
    <td><input name="kurs_bemerkung" size="50"></td>
  </tr>
  <tr>
    <td>
   
   <?php
   
      // Verbindung mit Datenbank herstellen
      mysql_connect();
      mysql_select_db("schulungen");
      
      // Abfrage kusbeschreibung
      $mysql_abfrage  = "SELECT DISTINCT kurs_name_kurz, kurs_beschreibung_id FROM kursbeschreibung ORDER BY kurs_name_kurz";
      
      $mysql_ergebnis=mysql_query($mysql_abfrage);
      
      $num = mysql_num_rows($mysql_ergebnis);
      
      mysql_close();
      
   ?>
   
Kurs-Beschreibung:</td>

    <td><select name="kurs_beschreibung_id_send">
     
    
   <?php
   
       //Ausgabe kurs_name_kurz
      while ($datensatz = mysql_fetch_assoc($mysql_ergebnis))
      {
         echo "<option value='" . $datensatz["kurs_beschreibung_id"] . "'>" . $datensatz["kurs_name_kurz"] . "</option>";            
      }
   ?>
   
    </select></td>
  </tr>
  <tr>
    <td>
   
   <?php
      
      // Verbindung mit Datenbank herstellen
      mysql_connect();
      mysql_select_db("schulungen");
      
      // Abfrage Dozentennamen
      $mysql_abfrage  = "SELECT DISTINCT dozent_id, dozent_name, dozent_vorname FROM dozenten ORDER BY dozent_name";
      
      $mysql_ergebnis=mysql_query($mysql_abfrage);
      
      $num = mysql_num_rows($mysql_ergebnis);
      
      mysql_close();
      
   ?>
   
Kurs-Kategorie:</td>

    <td><select name="kurs_dozent_id_send">
     
   <?php
       
      //Ausgabe Dozentennamen
      while ($datensatz = mysql_fetch_assoc($mysql_ergebnis))
      {
         echo "<option value='" . $datensatz["dozent_id"] . "'>" . $datensatz["dozent_vorname"] . " " . $datensatz["dozent_name"] . "</option>";            
      }
   ?>
   
<!-- Formular -->
</select>
</td>
</tr>
  <tr>
    <td colspan="2"><br>
      <input type="submit" name="gesendet">
      <input name="reset" type="reset">
   </td>
  </tr>
</table>
</form>
<p><a href="index.htm">Zur&uuml;ck zur Auwahl </a></p>
</body>
</html>


Zuletzt bearbeitet von Lapje am Mo 19.12.2005 22:54, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
Account gelöscht


Ort: -
Alter: -
Verfasst Mo 19.12.2005 23:14
Titel

Antworten mit Zitat Zum Seitenanfang

Wenn du mehrere Tabellen ohne Verknüpfungsbedingung wählst, ist quasi "alles mit allem" kombiniert, das nennt man dann Kreuzprodukt bzw. karthesisches Produkt, wie ich kürzlich in der Schule lernte. Ein kathesisches Produkt kombiniert mit einer Selektionsbedingung über WHERE bzw. [INNER|LEFT...] JOIN... ON... ist dann ein join und sollte auch das gewünschte Ergebnis liefern.

Wenn du zu viele und doppelte Datensätze bekommst, scheinste halt ne Selektionsbedingung "vergessen" zu haben. Aber ich sehe sowieso nicht, wie du hier mit nem Join weiterkommen möchtest: Du willst wahrscheinlich, dass sich bei Wahl einer Software die Dropdowns weiter unten anpassen. Dies kannst du nur durch einen neuen Request an den Server starten, entweder mit ner simplen Javascript-Funktion, die die Seite mit entspr. Parametern neu lädt, oder halt mit Techniken wie AJAX oder wie das heißt... da weiß ich allerdings spontan jetzt auch nciht wie das geht.

Nichtsdestotrotz ist dein Quelltext schrott, hier kann sicher noch mal Arbeit reingesteckt werden....


//
Für die Ausgabe der Daten würde sich ein join schon anbieten, das kann man durchaus in einer Abfrage unterbringen.


Zuletzt bearbeitet von am Mo 19.12.2005 23:24, insgesamt 1-mal bearbeitet
 
Anzeige
Anzeige
Lapje
Threadersteller

Dabei seit: 17.06.2003
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Mo 19.12.2005 23:24
Titel

Antworten mit Zitat Zum Seitenanfang

Hai

Erst mal danke...

also...

Was ich einfach möchte ist das ich die Daten die in den DD's drinn sind mit einer einzigen zentralen Datenbankabfrage ausgelesen bekomme ohne das ich doppelte sachen dabei habe. Also nichts damit dass sich unten was verändern soll wenn ich oben was mache...nur wie gesagt, alles in einem Rutsch wäre nicht schlecht...nur entweder kommt bei mir alles doppelt und dreifach oder gar nichts...

Das was Du geschrieben hast klingt logisch, weil im grunde ja (mathematisch gesehen) jedes mit jedem "multipliziert" wird...daher die ganzen Ergebnisse. So denke ich mir dass jetzt mal..*zwinker*
  View user's profile Private Nachricht senden
Account gelöscht


Ort: -
Alter: -
Verfasst Mo 19.12.2005 23:36
Titel

Antworten mit Zitat Zum Seitenanfang

Wie willste das denn anstellen? Da du zum Zeitpunkt noch gar keine Selektionsbedingung hast, kannste auch nicht alles in eine Abfrage verpacken, sondern musst halt ne Transaktion verwenden.

Es gibt zum Beispiel keinen Kursnamen, der soll ja erst erstellt werden. Wie willst du also nun Kurskategorien und Kursbeschreibung miteinander verbinden? Du kannst also höchstens n Join über beide Tabellen machen und die Selektionsbedingung weglassen, damit haste eben durch die Kreuzverbindung NUR unterschiedliche Zeilen, (in denen allerdings Spaltenwerte doppelt vorkommen), somit bringt dich ein DISTINCT nicht weiter.

Eine Lösung sehe ich nicht, vielleicht hab ich aber nur ein Brett vorm Koffr



///

Ich hab eher das Gefühl, dass das Datenbankdesign nicht so doll ist. Warum zum Beispiel ist Kursbeschreibung ausgelagert in eine Extratabelle? Eigentlich hat EIN Kurs jeweils EINE Beschreibung, also kannst du Beschreibung und Kurs in einer Tabelle unterbringen... die Beschreibung ist ja z.B. zum Zeitpunkt der Kursanlage noch gar nicht bekannt, wie kann es eine Beschreibung geben, ohne dass es den Kurs gibt, der beschrieben wird? Hier macht eine Verknüpfung schon aus logischer Sicht keinen Sinn.

Mit der Kategorie und den Dozenten verhält es sich ähnlich, hier stimmt zwar die Beziehung im Modell, aber deine Denke geht daran vorbei: Ein Kurs hat nen Dozenten und ne Kategorie, aber ein Dozent genausowenig ne Kategorie wie ein eine Kategorie einen Lehrer hat. Hier ist einfach keine Beziehung DA, über die man die Verknüpfung bilden könnte. Es MÜSSEN alle Kategorien UND alle Dozenten über jeweils eine Abfrage ausgelesen werden, um sie dann im nächsten Schritt dem neuen Kurs zuordnen zu können.

Sieh es einmal so: Es gibt so gut wie kein DBMS, das mehrere Statements in einer Transaktionen nicht optimieren könnte (dat is normal sowas, grade bei "teuren" Einfügeoperationen), und <= habs ja schon gesagt: Einfügeoperationen sind nunmal meist etwas teurer *zwinker*


Zuletzt bearbeitet von am Mo 19.12.2005 23:47, insgesamt 1-mal bearbeitet
 
Lapje
Threadersteller

Dabei seit: 17.06.2003
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Mo 19.12.2005 23:47
Titel

Antworten mit Zitat Zum Seitenanfang

Es kann auch sein dass ich mich nur mal wieder nicht besonders gut ausdrücke..*zwinker*

Im GRunde möchte ich nur dass in den DD's alle Daten aus der jeweilgen Spalte ausgelesen werden. Das z.B. unter DOZENT alle Dozenten stehen, so dass, wenn ein neuer Kurs eingegeben wird man den Dozent bequem aus einer Liste auswählen kann. Genauso mit den Kurskategorien. Da sollen einfach alle Kategorien aufgelistet werden so dass man sich die passende aussuchen kann. Und dann wird das ganze mit den dazugehörigen Werten in die kurs-Tabelle geschrieben.

Wie gesagt, so wie ich das jetzt habe funzt es auch wunderbar, aber es ist sicherlich nicht die eleganteste Lösung.

Vielleicht liegt es aber auch daran dass ich, nachdem ich die letzten Tage nur noch an diesem Ding gesessen bin, nicht mehr im stande bin geradeaus zu denken...

Muss ich mir sorgen machen wenn ich nur noch in Gleichungen denke ? *zwinker*

Lapje
  View user's profile Private Nachricht senden
Account gelöscht


Ort: -
Alter: -
Verfasst Mo 19.12.2005 23:50
Titel

Antworten mit Zitat Zum Seitenanfang

Zitat:
Wie gesagt, so wie ich das jetzt habe funzt es auch wunderbar, aber es ist sicherlich nicht die eleganteste Lösung.


imho und aus den oben genannten gründen gibt es keine andere lösung *zwinker*

ich lasse mich aber gerne berichtigen.
 
Lapje
Threadersteller

Dabei seit: 17.06.2003
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Mo 19.12.2005 23:54
Titel

Antworten mit Zitat Zum Seitenanfang

mmhh...vielleicht hab ich dass ja dann doch richtig gemacht..*zwinker* Wundert mich zwar, aber ok...*zwinker*
  View user's profile Private Nachricht senden
 
Ähnliche Themen GoLive9 Tabellen Probleme (Tutorial evt.)
Probleme mit Tabellen-Asicht - breiter als angegeben
probleme mit layern/ php-daten aus DB...
HTML code in MySQL Daten bank einfügen macht Probleme
IE 6 - Tabellen
tabellen
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.