繁体   English   中英

从 mysql 表中查找相关数据

[英]Finds related data from mysql table

这些是我的数据库的两个表结构

-- Table structure for table `gf_actor`


CREATE TABLE IF NOT EXISTS `gf_actor` (
  `actor_id` bigint(20) NOT NULL auto_increment,
  `actor_name` varchar(100) default NULL,
  PRIMARY KEY  (`actor_id`),
  UNIQUE KEY `actor_name` (`actor_name`)
) ENGINE=MyISAM;



-- Table structure for table `gf_film_actor`

CREATE TABLE IF NOT EXISTS `gf_film_actor` (
  `film_id` int(20) NOT NULL,
  `actor_id` int(20) NOT NULL,
  KEY `film_id` (`film_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

所以我需要一个查询,从 gf_actor 表中获取五个相关演员的姓名和 ID,这些演员在由 actor_id 执行的电影中扮演过角色,可以说 actor_id=1 并且电影必须不同,这意味着必须在不同的电影中扮演五个相关的演员actor_id=1

尝试这个

select ga.actor_id, actor_name from gf_actor ga inner join gf_film_actor gf on ga.actor_id = gf.actor_id where gf.film_id in (select gf1.film_id from gf_film_actor gf1 where  gf1.actor_id=1) AND gf.actor_id != 1 LIMIT 5

你有错误的表结构。 它应该是这样的:

CREATE TABLE IF NOT EXISTS `gf_actor` (
  `actor_id` bigint(20) NOT NULL auto_increment,
  `actor_name` varchar(100) default NULL,
  PRIMARY KEY  (`actor_id`),
  UNIQUE KEY `actor_name` (`actor_name`)
) ENGINE=MyISAM;

CREATE TABLE IF NOT EXISTS `gf_film` (
  `film_id` int(20) NOT NULL,
  `performed_by_actor_id` bigint(20) NOT NULL,
  KEY `film_id` (`film_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `gf_film_actor` (
  `film_id` int(20) NOT NULL,
  `actor_id` bigint(20) NOT NULL,
  KEY `film_actor_id` (`film_id`, `actor_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

现在您可以像这样创建查询:

SELECT a.*
  FROM `gf_film` AS f
  LEFT JOIN `gf_film_actor` AS fa ON f.`film_id` = fa.`film_id`
  LEFT JOIN `gf_actor` AS a ON fa.`actor_id` = a.`actor_id`
 WHERE f.`performed_by_actor_id` = 1
 LIMIT 0, 5;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM