2015-06-25 35 views
2

我正在寻找一种有效的方法来从我的MySQL数据库中的多个表中选择值,根据从主表中取消“超级”值。通过链接表从数据库中选择值

例如,该结构可以是这样:

widgets   {id, widgetType, userId, pageId} 
widgets_text {parentId, `value`, style} 
widgets_images {parentId, src, link} 

在以上这个例子中,在widgets_text和widgets_images的parentId的是“ID”中的表部件

如果我想根据输入的页面标识(pageId)选择所有文本和图像小部件,我将如何为此创建查询?

在此先感谢。

(另外我想补充,如果我想为一个新的形象[例如],我将如何去这样做做一个插入声明?)

编辑:我是什么 例目前正在执行:

SELECT 
    * 
FROM 
    widgets w 
    INNER JOIN widgets_text wt ON wt.parentId = w.id 
    INNER JOIN widgets_images wi ON wi.parentId = wt.parentId; 

^^必须为每个子表运行单独的查询。

+0

显示一些努力以及可能的输入和预期输出 –

+0

查看连接以了解如何“链接”表格。尝试写你自己的查询,并回来在这里显示你的努力和你的问题 –

+0

我道歉的家伙,我会在第二次更新该帖子:) – zuc0001

回答

2

要加入,你可以使用下面的语句文本和图像表,其中X是进入的pageID

select * 
from widgets w 
left join widgets_text wt on (wt.parentId = w.id) 
left join widgets_images wi on (wi.parentId = w.id) 
where w.pageId = X; 

我使用LEFT JOIN因为你的问题是不清楚这些表格是否可以保证有关于小部件行的行

+0

是的,他们肯定会在文本或图像表中的行,但不是都。 – zuc0001

+1

然后,左连接是要走的路,因为它试图从文本/图像表中获取一行,如果找到条目则返回值,如果不是每个表都返回NULL。如果您使用内部联接,那么如果两个表中都没有行,则不会得到结果。 – bish

+0

谢谢。使用你提供的代码(你有两个左连接),它会试图从两个表还是其中的一个留下连接? – zuc0001

1
SELECT widgets.*,widgets_text.*,widgets_images.* 
FROM widgets 
INNER JOIN widgets_text on widgets_text.parentId = widgets.id 
INNER JOIN widgets_images on widgets_images.parentId = widgets.id 
WHERE widgets.pageId = '".$page_value."' 

使用内部连接

相关问题