I have 2 tables. The parent table is learn_mor
e and child table is reference_keys
Both tables are innodb
reference_keys has two columns:
key_id [index]
key_href
learn_more table
id [primary]
keys_id [foreign key]
page_title
page_content
What I am trying to do is get multiple links in the learn more table from the reference_keys table. So example, learn_more table id:1, keys_id:1,3,4,8,13,25,..., page_title:Home Page: blah blah, page_content: blah blah......
The problem is that phpmyadmin will not allow me to put more than 1 id in the keys_id of learn_more.
//ERROR
//Warning: #1265 Data truncated for column 'keys_id' at row 1
I'm guessing the relation view is not setup correctly. - How do i fix this?
and on my page it shows the key_id in the echo instead of the value for the id: which is the key_href. so my page show "1" instead of the value for 1 which is a link..
Perhaps my sql query is not correct?
$SQL = "SELECT * FROM learn_more WHERE page_title = '$this_page'";
To build a many-to-many here is what you could do:
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
Then you have essentially a 1:N on each side of the relationship. Notice that I removed the FK from the learn_more table, too.
So to grab the relationship you'd query like this:
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
I believe the inner join is correct, i'm double-checking that.
If you want to have one row in learn_more correspond to multiple rows in reference_keys, you need to move the foreign key field from the learn_more table to the reference_keys table.
So instead of having a foreign key field in learn_more that points out to multiple rows of reference_keys (which, as you seem to be running into, is not supported), you have the multiple rows of reference_keys all point back to the learn_more table.
This would implement a one-to-many relationship between learn_more and reference_keys. If you need a many-to-many relationship (where each reference_key rows can be connected to many learn_more rows and vice-versa) you need to use a third table to establish a link between the two databases. See http://www.tomjewett.com/dbdesign/dbdesign.php?page=manymany.php for more information.
You're getting the keys_id
because that is what is in the learn_more table. To get the key_href
, you'll need to JOIN
the learn_more table to the reference_keys table. Also, @ametren is correct - you should have a many-to-many table that links your two current tables.
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]"