Ankündigung

Einklappen
Keine Ankündigung bisher.

0..n Beziehungen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zergling-new
    hat ein Thema erstellt 0..n Beziehungen.

    0..n Beziehungen

    Hallo,

    sagt mal wenn ich eine Tabelle `Movies` habe und eine Tabelle `Actors` und eine `ConMoviesActors` (Verknüpfungstabelle) und nun für n Filme (also z.B. Filme für eine Seite) so effizient wie möglich auch deren Schauspieler ermitteln möchte, wie gehe ich da vor?
    Ich würde zuerst die n Filme ermitteln (und damit deren ID)

    Code:
    SELECT * FROM movies ORDER BY id ASC LIMIT 0, 30
    (* benutze ich nur der Einfachheit halber)
    und mir dann per PHP die Film-IDs als SQL-WHERE Bedingung schreiben, also

    Code:
    ..WHERE id = 1 OR id = 2 OR id = 3 ....
    Ich halte das für ineffizient. Gibts keine elegantere Lösung? (id >= 1 AND id <= 30 kann ich natürlich nicht verwenden, da ja z.B. auch nach dem Filmtitel sortierte Seitenaufrufe erfolgen könnn, welche durch > < ja nicht zu erfassen sind)

    LEFT JOIN finde ich auch nicht gerade optimal, da ich ja dann ein Ergebnis der Art
    Code:
    1;Pretty Woman;Gere;Richard
    1;Pretty Woman;Roberts;Julia
    2;Top Gun;Cruise;Tom
    3;Ocean's Eleven;Roberts Julia
    3;Ocean's Eleven;Pit;Brett
    3;Ocean's Eleven;was weiß ich wer hier noch mitgespielt hat
    rausbekomme...

    Was ist hier also die Profi- oder Standard-Lösung?
    Danke & Gruß, c

  • Zergling-new
    antwortet
    Danke an beide, ihr habt mir 2 gute neue Ansatzpunkte geliefert, sowas hatte ich mir erhofft. JOIN (ohne INNER oder LEFT) kannte ich z.B. noch garnicht.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Re: 0..n Beziehungen

    Zitat von Zergling
    LEFT JOIN finde ich auch nicht gerade optimal, da ich ja dann ein Ergebnis der Art
    Code:
    1;Pretty Woman;Gere;Richard
    1;Pretty Woman;Roberts;Julia
    2;Top Gun;Cruise;Tom
    3;Ocean's Eleven;Roberts Julia
    3;Ocean's Eleven;Pit;Brett
    3;Ocean's Eleven;was weiß ich wer hier noch mitgespielt hat
    rausbekomme...
    Das liegt nur daran, dass Du die Felder auch selektierst.
    Nehmen wir zum Beispiel die Suche "Welche Schauspieler spielen im Film XYZ mit?" Dann brauchst Du nur das Feld mit dem Namen des jeweiligen Schauspielers, nicht nochmal den Filmnamen. Und schon garnicht SELECT *
    Code:
    SELECT
    	a.actor_name
    FROM
    	Movies as m
    JOIN
    	ConMoviesActors as c
    ON
    	c.movie_id=m.movie_id
    JOIN
    	Actors as a
    ON
    	c.actor_id=a.actor_id
    WHERE
    	m.movie_name='xyz'
    ORDER BY
    	a.actor_name ASC

    Einen Kommentar schreiben:


  • DerDesian
    antwortet
    Naja es gibt eine kleine Verbesserung in der Where klausel
    Code:
    ... WHERE id IN (1, 4, 45.....32, 7);
    Des Weiteren gibts die Idee des Subselects.
    Code:
    ..WHERE id IN (SELECT id FROM actors);
    Bin mir bei MySQL nicht sicher aber ich glaube das sollte tun

    Code:
    SELECT DISTINCT(movie.name,actors.name) FROM
      [der JOIN hier sieht je dan deiner Struktur unterschiedlich aus]
      WHERE actor[oder movie].id IN (SELECT id FROM actors[oder movie])
      ORDER BY movie.id, actors.id [oder umgekehrt, je nach Wunsch];
    Gruß
    Der Desian

    Einen Kommentar schreiben:

Lädt...
X