2012-07-11 87 views
0

我有2个表。父表是learn_mor e和子表是reference_keys 这两个表是InnoDB的PHP Mysql从多个表中选择查询

reference_keys has two columns: 
key_id [index] 
key_href 


learn_more table 
id [primary] 
keys_id [foreign key] 
page_title  
page_content 

我所试图做的就是从reference_keys表中了解更多信息表中的多个环节。 例如,learn_more表id:1,keys_id:1,3,4,8,13,25,...,page_title:主页:blah等等,page_content:等等等等......

问题在于phpmyadmin不允许我在learn_more的keys_id中放置多个ID。

//错误
//警告:#1265数据在1行

我猜的关系视图截断列 'keys_id' 是不是设置正确。 - 我该如何解决?

并且在我的页面上显示的是echo中的key_id,而不是id的值:which是key_href。所以我的网页显示“1”,而不是1的值,这是一个链接..

也许我的sql查询不正确?

$SQL = "SELECT * FROM learn_more WHERE page_title = '$this_page'"; 
+1

在这里你有一对多的关系,其中'reference_key'可以被许多'learn_more'引用,但每个'learn_more'可能只引用一个'reference_key'。你是在寻找一个多对多的? – ametren 2012-07-11 17:12:24

+0

是的,我需要一个多对多的 - 对不起,我只是学习这 – fyz 2012-07-11 17:15:00

回答

2

要构建许多一对多这里是你能做什么:

reference_keys has two columns: 
key_id [index] 
key_href 

learn_more_to_reference_key 
reference_key_id [FK to reference_keys] 
learn_more_id [FK to learn_more] 

learn_more table 
id [primary] 
page_title  
page_content 

然后你有本质上是1:N的关系每一侧。请注意,我也从learn_more表中删除了FK。

所以抢你查询这样的关系:我认为,内部连接是否正确,我仔细核对

SELECT * FROM Learn_More lm 
INNER JOIN learn_more_to_reference_key lmtrk ON lm.id = lmtrk.learn_more_id 
INNER JOIN reference_keys rk ON rk.id = lmtrk.reference_key_id 

+0

我看到所以我需要第三张桌子,使连接在那里? – fyz 2012-07-11 17:19:52

+0

@FabioAnselmo是的,这是正确的。 – ametren 2012-07-11 17:23:47

+0

thx为qry语句我会再次报告,如果我再次问题 – fyz 2012-07-11 17:24:34

1

如果您希望learn_more中的一行对应于reference_keys中的多行,则需要将learn_more表中的外键字段移至reference_keys表。

因此,不是在learn_more中有一个指向reference_keys的多行的外键字段(它看起来正在运行,不受支持),您有多行reference_keys都指向learn_more表。

这将实现learn_more和reference_keys之间的一对多关系。如果您需要多对多关系(其中每个reference_key行可以连接到许多learn_more行,反之亦然),则需要使用第三个表来建立两个数据库之间的链接。有关更多信息,请参阅http://www.tomjewett.com/dbdesign/dbdesign.php?page=manymany.php

1

您正在获取keys_id,因为这是learn_more表中的内容。要获得key_href,您需要JOINlearn_morereference_keys表。 此外,@ametren是正确的 - 你应该有一个多对多的表,链接你的两个当前表。

key_linking_table 
id [primary and foreign key] 
keys_id [primary and foreign key] 

$SQL = 
"SELECT lm.id, lm.page_title, lm.page_content, rk.key_href 
FROM learn_more AS lm 
LEFT JOIN key_linking_table AS klt 
ON klt.id = rk.id 
LEFT JOIN reference_keys AS rk 
ON klt.key_id = rk.key_id 
WHERE [condition]"