2

我有 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');

其中有 1 条记录的 child_id 设置为 0。这条记录属于第二张表中的 child_id。

第二张桌子

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 表中的行吗?

4

1 回答 1

0
SELECT learning_story.*
FROM   learning_story LEFT JOIN story_groups USING (story_id)
WHERE  learning_story.child_id = ? OR story_groups.child_id = ?
于 2012-10-14T00:34:21.950 回答