0

私は2つのテーブルを持っています。親テーブルはlearn_more で、子テーブルは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 テーブル id:1、keys_id:1,3,4,8,13,25、...、page_title:ホームページ: 何とか、page_content: 何とか......

問題は、phpmyadmin では、learn_more の keys_id に複数の ID を入れることができないことです。

//エラー
//警告: #1265 行 1 の列 'keys_id' のデータが切り捨てられました

関係ビューが正しく設定されていないと思います。- どうすれば修正できますか?

私のページでは、key_href である id の値ではなく、echo に key_id が表示されます。したがって、私のページには、リンクである 1 の値の代わりに「1」が表示されます。

おそらく私のSQLクエリは正しくありませんか?

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

3 に答える 3

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

内部結合は正しいと思います。再確認しています。

于 2012-07-11T17:18:15.587 に答える
1

Learn_more の 1 つの行を reference_keys の複数の行に対応させたい場合は、外部キー フィールドをlearn_more テーブルから reference_keys テーブルに移動する必要があります。

したがって、learn_more に複数の reference_keys の行を指す外部キー フィールドを持つ代わりに (これは、実行しているように見えるため、サポートされていません)、複数の reference_keys の行がすべて Learn_more テーブルを指すようにします。

これにより、learn_more と reference_keys の間に 1 対多の関係が実装されます。多対多の関係 (各 reference_key 行を多くの Learn_more 行に接続でき、その逆も可能) が必要な場合は、3 番目のテーブルを使用して 2 つのデータベース間のリンクを確立する必要があります。詳細については、 http://www.tomjewett.com/dbdesign/dbdesign.php?page=manymany.phpを参照してください。

于 2012-07-11T17:19:26.207 に答える
1

keys_idこれは、learn_moreテーブルにあるためです。を取得するには、learn_moreテーブルからreference_keyskey_hrefテーブルに移動する必要があります。また、@ametren は正しいです。現在の 2 つのテーブルをリンクする多対多のテーブルが必要です。JOIN

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]"
于 2012-07-11T17:19:30.997 に答える