Marc: Cross join?

hallo

kann mir jemand einen tipp geben,wie folgende aufgabe am besten gelöst wird?

ich habe 2 tabellen:

eine tabelle "personal"
eine tabelle "aufträge"

ich muss eine x-beliebige person einem x-beliebigen auftrag zuteilen.

die ausgabe soll zeigen:

+----------------------------------------+
+       | datum1 | datum2 | datum3 | etc.+
+----------------------------------------+

  • name1 | notiz  |        | notiz  |     +
    +----------------------------------------+
  • name2 |        | notiz  |        |     +
    +----------------------------------------+
  • etc.                                   +
    +----------------------------------------+
      etc.

links sind alle personen die in der tabelle "personal" vorhanden sind. rechts davon sind in einer übersicht über die nächsten 14 tage infos,wer wann arbeitet,frei hat,krank ist, etc. (notiz).

reichen dafür z.b. diese 2 tabellen oder braucht es eine dritte mit den zuteilungen? brauchts dafür anweisungen wie "Cross join"?

wäre für einen anstoss/richtungsanzeige dankbar.

  1. Hi,

    also die 2 Tabellen reichen für diese Aufgabe auf jeden Fall!

    Nein brauchst auch kein Cross join.

    mfg

    1. Moin

      falls

      eine x-beliebige person einem x-beliebigen auftrag zuteilen.

      auf eine n:m-Beziehung hindeuten soll, dann ist eine Zwischentabelle durchaus empfehlenswert. (um nicht zu sagen das einzig richtige)

      Gruß
      Wurf

  2. dank euch für euer echo. also ich habs jetzt mal so gelöst und scheint zu funktionieren:

    $pers_query = mysql_query("select dispo_personal.* ,dispo_auftrag.* FROM dispo_personal
    LEFT JOIN dispo_auftrag ON dispo_personal.auftrags_id = dispo_auftrag.id");

    einwände?

    1. Hallo Marc,

      dank euch für euer echo. also ich habs jetzt mal so gelöst und scheint zu funktionieren:

      $pers_query = mysql_query("select dispo_personal.* ,dispo_auftrag.* FROM dispo_personal
      LEFT JOIN dispo_auftrag ON dispo_personal.auftrags_id = dispo_auftrag.id");

      Erstens ist es immer eine gute Idee, das SQL-Statement in einer eigenen String-Variablen vorzubereiten, zu Debugzwecken kann man es prima mit einer echo-Anweisung ausgeben.

      Weiterhin solltest Du nur die Spalten auswählen, die Du auch wirklich benötigst, und nicht überflüssige Spalten (bequem) mit * auswählen. Du hast auch bessere Kontrolle über die Spalten. Es ist ein einziges Mal, beim Erstellen mehr Aufwand, der sich aber lohnt.

      einwände?

      Ich möchte nur noch einmal auf den Einwurf von MrWurf zurückkommen:
      Stimmt folgende Aussage: "Jedem Auftrag ist genau ein Mitarbeiter zugeordnet."

      Ansonsten noch ein allgemeiner Hinweis: Deine Aufgabe könntest Du elegant mit einer Kreuztabellenabfrage, die etwas ganz anderes ist als ein CROSS JOIN, erledigen können. Jedoch ist das MS Access bzw. die Jet-Engine das einzige mir bekannte Datenbankmanagementsystem, das sowas unterstützt. Was ein CROSS JOIN ist, kannst Du im geplanten Feature-Artikel von Rouven nachlesen, siehe dazu Tims Link in https://forum.selfhtml.org/?t=119395&m=766062.

      Freundliche Grüße

      Vinzenz

      1. hallo vinzenz

        danke dir vielmals für Deine ausführungen und link-tipp.
        gruss
        marc