Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
nkostya 03.05.2004 11:51 / 03.05.2004 11:54
Имеется 5 таблиц:movie - таблица с информацией о фильмах genre - таблица жанров person - таблица с актерами movie_to_genre - к каким жанрам принадлежит фильм movie_to_person - кто снимался в фильме
# # Table structure for table 'genre' # CREATE TABLE genre ( genre_id int(10) NOT NULL auto_increment, title varchar(255) binary NOT NULL default '', PRIMARY KEY (genre_id), UNIQUE KEY ix_genre_1 (title), KEY ix_genre_0 (genre_id) ) TYPE=MyISAM; # # Table structure for table 'movie' # CREATE TABLE movie ( movie_id int(10) NOT NULL auto_increment, eng_name varchar(255) default NULL, rus_name varchar(255) binary NOT NULL default '', issue_year year(4) NOT NULL default '0000', site varchar(255) default NULL, length int(3) default NULL, size varchar(255) default NULL, shrt_description text, preview_id int(10) default NULL, poster_id int(10) default NULL, PRIMARY KEY (movie_id), KEY ix_movie_0 (movie_id), KEY ix_movie_1 (rus_name), KEY ix_movie_2 (eng_name), KEY ix_movie_3 (issue_year) ) TYPE=MyISAM; # # Table structure for table 'movie_to_genre' # CREATE TABLE movie_to_genre ( movie_id int(10) NOT NULL default '0', genre_id int(10) NOT NULL default '0', UNIQUE KEY ix_movie_genre_0 (movie_id,genre_id), KEY ix_movie_genre_2 (movie_id), KEY ix_movie_genre_1 (genre_id) ) TYPE=MyISAM; # # Table structure for table 'movie_to_person' # CREATE TABLE movie_to_person ( movie_id int(10) NOT NULL default '0', person_id int(10) NOT NULL default '0', status tinyint(4) NOT NULL default '0', UNIQUE KEY ix_movie_to_person_0 (movie_id,person_id,status), KEY ix_movie_to_person_3 (status), KEY ix_movie_to_person_1 (movie_id), KEY ix_movie_to_person_2 (person_id) ) TYPE=MyISAM; # # Table structure for table 'person' # CREATE TABLE person ( person_id int(10) NOT NULL auto_increment, eng_name varchar(255) default NULL, rus_name varchar(255) binary default NULL, PRIMARY KEY (person_id), UNIQUE KEY ix_person_1 (rus_name), UNIQUE KEY ix_person_2 (eng_name), KEY ix_person_0 (person_id) ) TYPE=MyISAM;Необходимо сделать поиск по Актерам. Запрос выглядит так:
SELECT movie.movie_id as id, movie.rus_name, movie.issue_year, movie.shrt_description, IF(movie_to_genre.genre_id,0,1) as genre_not_define FROM movie ^MAIN:pSQL.left_join[from;movie_to_genre;movie.movie_id = movie_to_genre.movie_id] ^if(def $data.person){ ^MAIN:pSQL.left_join[from;movie_to_person;movie.movie_id = movie_to_person.movie_id] ^MAIN:pSQL.left_join[from;person;movie_to_person.person_id = person.person_id] } WHERE ^if(def $data.person){ ( ^MAIN:pSQL.lower[person.rus_name] like '%^data.person.lower[]%' OR ^MAIN:pSQL.lower[person.eng_name] like '%^data.person.lower[]%' ) AND } ( ^if(^check_right(2)(8)){IF(movie_to_genre.genre_id,1,0) = 0 OR} IF(movie_to_genre.genre_id,1,0) = 1 ) } GROUP BY movie.movie_id ORDER BY movie.rus_name ASC, movie.issue_year DESCЭто сокращенный запрос, в полной версии он ищет по году создания фильма, названию, жанрам и т.д.