用mysql查询连接表?

时间:2018-06-15 19:18:46

标签: php mysql

表A(曲目):

track_name1 |   link    |   age |   artists
track_name2 |   link    |   age |   here
track_name3 |   link    |   age |   but
track_name4 |   link    |   age |   how?

表B(艺术家):

jon     |   nick    |   age
mark    |   nick    |   age
luke    |   nick    |   age
you     |   nick    |   age

我想得到  跟踪" 1" - >艺术家"乔恩和马克"并获得有关他们的所有其他信息。 谢谢!

1 个答案:

答案 0 :(得分:1)

我同意@Uueerdo的评论。你需要第三张桌子,将曲目和艺术家一起映射。请参阅以下代码:

CREATE TABLE IF NOT EXISTS `tracks` (
    `id` int(11) unsigned NOT NULL,
    `name` varchar(200) NOT NULL,
    `link` varchar(200) NOT NULL,
    `age` int(11) NOT NULL,
    PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
INSERT INTO `tracks` (`id`, `name`, `link`, `age`) VALUES
   ('1', 'track_name1', 'link1', '25'),
   ('2', 'track_name2', 'link2', '25'),
   ('3', 'track_name3', 'link3', '35'),
   ('4', 'track_name4', 'link4', '35');

CREATE TABLE IF NOT EXISTS `artists` (
    `id` int(11) unsigned NOT NULL,
    `name` varchar(200) NOT NULL,
    `nick_name` varchar(200) NOT NULL,
    `age` int(11) NOT NULL,
    PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
INSERT INTO `artists` (`id`, `name`, `nick_name`, `age`) VALUES
    ('1', 'jon', 'jon', '25'),
    ('2', 'mark', 'mark', '25'),
    ('3', 'luke', 'luke', '35'),
    ('4', 'you', 'you', '35');

CREATE TABLE IF NOT EXISTS `tracks_artists` (
    `id` int(11) unsigned NOT NULL,
    `track_id` int(11) NOT NULL,
    `artist_id` int(11) NOT NULL,
    PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
INSERT INTO `tracks_artists` (`id`, `track_id`, `artist_id`) VALUES
    ('1', '1', '1'),
    ('2', '2', '2'),
    ('3', '3', '3'),
    ('4', '4', '4’);

然后您可以运行下面提到的查询来获得上述结果:

SELECT `t2`.`name`, `t2`.`link`, `t2`.`age`, `t3`.`name`
FROM `tracks_artists` `t1` 
INNER JOIN `tracks` `t2` ON `t1`.`track_id` = `t2`.`id`
INNER JOIN `artists` `t3` ON `t1`.`artist_id` = `t3`.`id`;

我已将代码设为Here。你可以测试一下。

希望这有帮助。