parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

В данный момент у меня так...

nkostya 01.06.2004 21:28 / 01.06.2004 21:31

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 (person_id),
  KEY ix_movie_to_person_1 (movie_id,person_id),
  KEY ix_movie_to_person_2 (movie_id),
  KEY ix_movie_to_person_4 (status)
) TYPE=MyISAM;


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;

movie_id - id фильма
type - тип привязки (режиссер/актер)
lang - по какому языку смотрим (rus/eng)

...
$person[^MAIN:pSQL.sql[table][
	SELECT
		person.person_id as id,
		person.eng_name,
		person.rus_name,
		IF(movie_to_person.movie_id IS NOT NULL,1,0) as checked
	FROM
		person
	^MAIN:pSQL.left_join[from;movie_to_person;movie_to_person.person_id = person.person_id AND movie_to_person.movie_id = $movie_id && movie_to_person.status = $type]
	WHERE
		^if($letter ne "other"){
			^MAIN:pSQL.upper[person.${lang}_name] LIKE '$letter%'
		}{
			$alphabet[^table::load[nameless;_${lang}_alphabet.cfg]]
			(^alphabet.menu{
				^MAIN:pSQL.upper[person.${lang}_name] NOT LIKE '$alphabet.0%'
			}[AND]) OR
			person.${lang}_name IS NULL
		}
	ORDER BY
		id ASC
И потом делаю ^person.menu и генерирую XML...

Совсем коряво? Как оптимальнее сделать?