MySQL Abfrage
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
abfragen
code
datenbank
film
filmen
ford
index
not
null
ordern
regie
regisseur
schauspieler
schauspielern
set
spielberg
studio
update
url
-
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.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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:
Filme pro Schauspieler: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 Studio: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;
Der SQL-Code zum Erzeugen der Datenbank ist der folgende: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;
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage