kostenloser Webspace werbefrei: lima-city


MySQL Abfrage

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    robftp

    Kostenloser Webspace von robftp

    robftp hat kostenlosen Webspace.

    Hallo,

    hab mir ne Film-DB geschrieben und auch Regisseure und Actors eingepflegt.
    Nun möchte ich eine Abfragen realisieren, wo die Regisseure sortiert nach Häufigkeit ausgebe mit folgenden Abfrage:

    SELECT REGIE, COUNT( * ) FROM movies GROUP BY REGIE ORDER BY COUNT( * ) DESC

    Ergebenis:

    Steven Spielberg 13
    Ridley Scott 8
    Steven Soderbergh 7
    Michael Bay 5
    Jay Roach 5
    Francis Ford Coppola 5
    Robert Zemeckis 5

    so schön, so gut.
    Jetzt wollte ich das das auch bei den Schauspielern und abfragen welcher Schauspieler auf häufigsten vorkommt, da ich sie allerdings in dieser Form abgespeichert habe kann ich nicht dieselbe Abfrage verwenden.

    "Russell Crowe, Elizabeth Banks, Liam Neeson, Olivia Wilde, Jonathan Tucker"

    Hab keinen Plan wie ich das umsetzen soll.


  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo robftp,

    wahrscheinlich ist der Aufbau Deiner Datenbank etwas unpassend.
    Ich schlage jetzt einfach mal folgendes vor:
    http://imageupload.org/?d=55A8508E1
    Damit kannst Du jedem Film mehrere Schauspieler und im Zweifel auch Regisseure und Studios zuordnen.
    Die Abfrage der Anzahl ist dann auch recht einfach:
    Filme pro Regisseur:
    SELECT directors.surname, directors.forename, COUNT(movie_directors.id_movie)
    FROM movie_directors INNER JOIN directors ON movie_directors.id_director = directors.id
    GROUP BY directors.surname, directors.forename
    ORDER BY COUNT(movie_directors.id_movie) DESC;
    Filme pro Schauspieler:
    SELECT actors.surname, actors.forename, COUNT(movie_actors.id_movie)
    FROM movie_actors INNER JOIN actors ON movie_actors.id_actor = actors.id
    GROUP BY actors.surname, actors.forename
    ORDER BY COUNT(movie_actors.id_movie)  DESC;
    Filme pro Studio:
    SELECT studios.name, COUNT(movie_studios.id_movie)
    FROM movie_studios INNER JOIN studios ON movie_studios.id_studio = studios.id
    GROUP BY studios.name
    ORDER BY COUNT(movie_studios.id_movie) DESC;
    Der SQL-Code zum Erzeugen der Datenbank ist der folgende:
    SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
    SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
    SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
    
    
    -- -----------------------------------------------------
    -- Table `movies`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `movies` ;
    
    CREATE  TABLE IF NOT EXISTS `movies` (
      `id` INT NOT NULL AUTO_INCREMENT ,
      `title` VARCHAR(45) NOT NULL ,
      `year` DATETIME NOT NULL ,
      `story_line` TEXT NULL ,
      PRIMARY KEY (`id`) )
    ENGINE = InnoDB;
    
    
    -- -----------------------------------------------------
    -- Table `directors`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `directors` ;
    
    CREATE  TABLE IF NOT EXISTS `directors` (
      `id` INT NOT NULL AUTO_INCREMENT ,
      `surname` VARCHAR(25) NOT NULL ,
      `forename` VARCHAR(25) NOT NULL ,
      PRIMARY KEY (`id`) )
    ENGINE = InnoDB;
    
    
    -- -----------------------------------------------------
    -- Table `artists`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `artists` ;
    
    CREATE  TABLE IF NOT EXISTS `artists` (
      `id` INT NOT NULL AUTO_INCREMENT ,
      `surname` VARCHAR(25) NOT NULL ,
      `forename` VARCHAR(25) NOT NULL ,
      PRIMARY KEY (`id`) )
    ENGINE = InnoDB;
    
    
    -- -----------------------------------------------------
    -- Table `movie_artists`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `movie_artists` ;
    
    CREATE  TABLE IF NOT EXISTS `movie_artists` (
      `id_movie` INT NOT NULL ,
      `id_artist` INT NOT NULL ,
      PRIMARY KEY (`id_movie`, `id_artist`) ,
      INDEX `key_movie_artists_movie` (`id_movie` ASC) ,
      INDEX `key_movie_artists_artists` (`id_artist` ASC) ,
      CONSTRAINT `key_movie_artists_movie`
        FOREIGN KEY (`id_movie` )
        REFERENCES `movies` (`id` )
        ON DELETE SET NULL
        ON UPDATE CASCADE,
      CONSTRAINT `key_movie_artists_artists`
        FOREIGN KEY (`id_artist` )
        REFERENCES `artists` (`id` )
        ON DELETE SET NULL
        ON UPDATE CASCADE)
    ENGINE = InnoDB;
    
    
    -- -----------------------------------------------------
    -- Table `movie_directors`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `movie_directors` ;
    
    CREATE  TABLE IF NOT EXISTS `movie_directors` (
      `id_movie` INT NOT NULL ,
      `id_director` INT NOT NULL ,
      PRIMARY KEY (`id_movie`, `id_director`) ,
      INDEX `key_movie_directors_movie` (`id_movie` ASC) ,
      INDEX `key_movie_directors_director` (`id_director` ASC) ,
      CONSTRAINT `key_movie_directors_movie`
        FOREIGN KEY (`id_movie` )
        REFERENCES `movies` (`id` )
        ON DELETE SET NULL
        ON UPDATE CASCADE,
      CONSTRAINT `key_movie_directors_director`
        FOREIGN KEY (`id_director` )
        REFERENCES `directors` (`id` )
        ON DELETE SET NULL
        ON UPDATE CASCADE)
    ENGINE = InnoDB;
    
    
    -- -----------------------------------------------------
    -- Table `studios`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `studios` ;
    
    CREATE  TABLE IF NOT EXISTS `studios` (
      `id` INT NOT NULL AUTO_INCREMENT ,
      `name` VARCHAR(45) NOT NULL ,
      PRIMARY KEY (`id`) )
    ENGINE = InnoDB;
    
    
    -- -----------------------------------------------------
    -- Table `movie_studios`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `movie_studios` ;
    
    CREATE  TABLE IF NOT EXISTS `movie_studios` (
      `id_movie` INT NOT NULL ,
      `id_studio` INT NOT NULL ,
      PRIMARY KEY (`id_movie`, `id_studio`) ,
      INDEX `key_movie_studios_movie` (`id_movie` ASC) ,
      INDEX `key_movie_studios_studio` (`id_studio` ASC) ,
      CONSTRAINT `key_movie_studios_movie`
        FOREIGN KEY (`id_movie` )
        REFERENCES `movies` (`id` )
        ON DELETE SET NULL
        ON UPDATE CASCADE,
      CONSTRAINT `key_movie_studios_studio`
        FOREIGN KEY (`id_studio` )
        REFERENCES `studios` (`id` )
        ON DELETE SET NULL
        ON UPDATE CASCADE)
    ENGINE = InnoDB;
    
    
    
    SET SQL_MODE=@OLD_SQL_MODE;
    SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
    SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;


    Edit: Ich hatte die GROUP-BY-Klauseln vergessen.

    Beitrag zuletzt geändert: 14.8.2011 23:02:34 von darkpandemic
  4. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!