2012-10-14 60 views
2

我有2个需要查询的表。我无法为链接的键设置唯一的值。 第一个表格存储每个小孩的故事或帖子。MySQL加入不具有唯一外键的第2个表

CREATE TABLE IF NOT EXISTS `learning_story` (
    `story_id` int(10) NOT NULL AUTO_INCREMENT, 
    `child_id` int(10) NOT NULL, 
    `img_file` varchar(250) NOT NULL, 
    `title` varchar(300) NOT NULL, 
    `description` text NOT NULL, 
    `link` varchar(300) NOT NULL, 
    `storydate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `teacher_id` int(11) NOT NULL, 
    `pro_id` int(10) NOT NULL DEFAULT '0', 
    `status` varchar(10) NOT NULL DEFAULT 'draft', 
    PRIMARY KEY (`story_id`), 
    KEY `child_id` (`child_id`), 
    KEY `pro_id` (`pro_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ; 

每个故事或帖子对于一个孩子来说都是独特的(child_id外键)。 现在我添加了添加属于一组儿童的帖子的功能。 这里有4点样品的行

INSERT INTO `learning_story` (`story_id`, `child_id`, `img_file`, `title`, `description`, `link`, `storydate`, `teacher_id`, `pro_id`, `status`) VALUES 
(1, 5, '', 'Story 1', '<p><img src="http://127.0.0.1/websites/my-books/assets/mercury_img/2dfeb1f41c48a308b7eee8526918ebb7.JPG" style="cursor: default; width: 222.28915662650604px; height: 125px; float: right; margin: 0px 0px 10px 10px; " alt=""></p><p><img src="http://127.0.0.1/websites/my-books/img/timbthumb.php?src=http://127.0.0.1/websites/my-books/assets/2/children/test_09.JPG&q=100&w=180&h=130" alt="imagetitle" style="cursor: default; ">dsd sdsdsd s ds ffdfdf </p>\r\n', '', '2012-10-08 20:42:05', 0, 2, 'draft'), 
(12, 5, '', 'Teachers Final Test 33', '<p>ds sd sd sd sd  dsdsd dsd sd s </p><p><br></p><p>Tweety</p>\r\n', '', '2012-10-12 12:19:45', 31, 2, 'draft'), 
(30, 6, '', 'Boys High Choir', '<p>sasassa</p>', '', '2012-10-14 09:55:08', 0, 2, 'draft'), 
(32, 0, '', 'Story Not Mine ID 5', '<p>dsd sd sd s ds ds ds sd sd </p>\r\n', '', '2012-10-14 12:21:36', 0, 2, 'draft'); 

其中存在具有一个child_id组为0。此记录属于child_id的在第二表1个记录。

第二台

CREATE TABLE IF NOT EXISTS `story_groups` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `child_id` int(10) NOT NULL, 
    `story_id` int(10) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=112 ; 



INSERT INTO `story_groups` (`id`, `child_id`, `story_id`) VALUES 
(40, 7, 30), 
(41, 8, 30), 
(107, 8, 32), 
(108, 9, 32), 
(109, 11, 32), 
(110, 12, 32), 
(111, 5, 32); 

所以我想所有的故事/职位对一个孩子。包括集团故事。

我试过UNION匹配和一堆JOIN组合,但我只是无法破解它。

这可能是一个简单的JOIN操作,我只是无法破解。

有人请帮我写我的查询,以包括story_groups表中的行吗?

+0

为什么不废除第一个表中的'child_id'列,并且仅通过第二个表中的记录将所有的故事与他们的孩子联系起来? – eggyal

+0

之后你指出这是非常有道理的。刚刚没有组功能设置,并不想改变太多。需要停止修补和重新连接。 – preschool

回答

0
SELECT learning_story.* 
FROM learning_story LEFT JOIN story_groups USING (story_id) 
WHERE learning_story.child_id = ? OR story_groups.child_id = ? 
+0

嘿,那就是现场!需要刷上sql。 – preschool