在MySQL中嵌套选择

时间:2011-03-03 11:32:21

标签: mysql view

设置

我网站上的每个页面都有四个按小部件排列的小部件(1-4)。 我有一个表'内容'和表'小部件'。我有一个桥接表,将content。id映射到widgets。content_id。

问题

我想要做的是运行selects * from content along with addition columns widget_1, widget_2, widget_3, widget_4, each containing the id of the widget linked to that page.

的查询

我整个上午都在尝试一些嵌套的选择,似乎无法破解它。我已经复制了下面涉及的表的MySQL转储: - )。

CREATE TABLE `content` (
  `id` int(11) NOT NULL auto_increment,
  `permalink` varchar(64) character set latin1 NOT NULL,
  `parent` int(11) NOT NULL default '1',
  `title` varchar(128) character set latin1 NOT NULL,
  `content` text character set latin1,
  `content_type` varchar(16) NOT NULL default 'page',
  PRIMARY KEY  (`id`),
  FULLTEXT KEY `title` (`title`,`content`,`meta_description`,`meta_keywords`)
)


CREATE TABLE `widgets` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `title` varchar(64) default NULL,
  `text` varchar(256) default NULL,
  `image` varchar(128) default NULL,
  `target` varchar(128) default NULL,
  `code` varchar(32) default NULL,
  PRIMARY KEY  (`id`)
)

CREATE TABLE `content_widgets` (
  `content_id` int(11) NOT NULL,
  `widget_id` int(11) NOT NULL,
  `order` tinyint(4) NOT NULL
)

非常感谢!

1 个答案:

答案 0 :(得分:0)

您不需要嵌套查询 - 只需要一个连接。假设您要从内容记录开始并返回匹配的小部件....

SELECT c.*, w.*
FROM content c
   LEFT JOIN (
      content_widgets cw INNER JOIN widgets w
      ON cw.widget_id=w.id
   ) ON c.id=cw.id
WHERE c.id=....

虽然简单的内部联接更好的是你知道你有小部件:

SELECT c.*, w.*
FROM content c, content_widgets cw widgets w
WHERE cw.widget_id=w.id
AND c.id=cw.id
AND c.id=....