簡體   English   中英

PHP Mysql從多個表中選擇查詢

[英]PHP Mysql select query from multiple tables

我有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 table id:1,keys_id:1、3、4、8、13、25,...,page_title:首頁:blah blah,page_content:blah blah ......

問題是phpmyadmin不允許我在learning_more的keys_id中放入超過1個id。

//錯誤
//警告:#1265第1行的“ keys_id”列的數據被截斷

我猜測關系視圖未正確設置。 - 我該如何解決?

在我的頁面上,它在回顯中顯示key_id而不是id:的值,即key_href。 所以我的頁面顯示“ 1”,而不是鏈接的1的值。

也許我的SQL查詢不正確?

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

要建立多對多,您可以執行以下操作:

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。 請注意,我也從learning_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

我相信內部聯接是正確的,我正在仔細檢查。

如果要在learn_more中有一行對應於reference_keys中的多行,則需要將外鍵字段從learn_more表移到reference_keys表。

因此,與其在learn_more中沒有一個指向多行reference_keys(似乎不被支持)的外鍵字段,而是使多行reference_keys都指向learn_more表。

這將實現learn_more和reference_keys之間的一對多關系。 如果您需要多對多關系(每個reference_key行可以連接到許多learning_more行,反之亦然),則需要使用第三個表在兩個數據庫之間建立鏈接。 有關更多信息,請參見http://www.tomjewett.com/dbdesign/dbdesign.php?page=manymany.php

您正在獲取keys_id因為這就是learn_more表中的內容。 要獲得key_href ,你需要JOINLEARN_MORE表到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]"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM