我有2张桌子。父表是learn_mor
e,子表是reference_keys
两张表都是innodb
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表中获取多个链接。 例如,learn_more表id:1,keys_id:1,3,4,8,13,25,...,page_title:主页:blah blah,page_content:blah blah ......
问题是phpmyadmin不允许我在learn_more的keys_id中输入多于1个id。
//错误
//警告:#1265数据截断列' keys_id'在第1行
我猜测关系视图设置不正确。 - 我该如何解决这个问题?
在我的页面上它显示了echo中的key_id而不是id的值:key_href。所以我的页面显示" 1"而不是1的值,这是一个链接..
也许我的sql查询不正确?
$SQL = "SELECT * FROM learn_more WHERE page_title = '$this_page'";
答案 0 :(得分: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
我相信内部联接是正确的,我正在仔细检查。
答案 1 :(得分: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。
答案 2 :(得分:1)
您获得的是keys_id
,因为这是 learn_more 表中的内容。要获得key_href
,您需要将 learn_more 表JOIN
添加到 reference_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]"