簡體   English   中英

如何通過MySQL中的外鍵鏈接檢索某些值?

[英]How to retrieve certain value(s) through foreign key linking in MySQL?

抱歉,標題不清楚,但我無法提出更好的建議。

我的困境是:

我的數據庫中有一個名為“會議”的InnoDB表,其結構如下:

  • Meeting_id(主鍵,auto_increment)
  • user1_id(指向稱為“用戶”的表中的user_id的外鍵)
  • user2_id(指向稱為“用戶”的表中的user_id的外鍵)
  • 時間(類型為DATETIME)
  • 位置(類型VARCHAR(200))

表“用戶”是基本的,看起來像這樣:

  • user_id(主鍵,auto_increment)
  • first_name(類型VARCHAR(30))
  • last_name(類型VARCHAR(30))

我有一個PHP文件,目的是簡單地打印出會議的描述,例如:

您保存了以下會議信息:

用戶1 | 用戶2 | 時間和日期| 會議地點

約翰·杜 簡·杜 2010-10-10 10:10:10 | 紐約

現在,我只想使用會議ID,調用我的數據庫(僅“會議”表),並能夠獲取user1和user2的first_name和last_name。

現在,我無法正常工作的代碼如下所示:

$query = "SELECT * FROM meetings WHERE meeting_id = " . $mid;
$data  = mysqli_query($dbc, $query);
$row   = mysqli_fetch_array($data); // ANY CHANGES HERE?

...

echo '<p>You saved the following meeting information::</p>';
echo '<table>';
echo '<tr><th>User 1</th><th>User 2</th><th>Time & Date</th><th>Meeting location</th></tr>';
echo '<td>' . $row['user1_id']['first_name'] . ' ' . $row['user1_id']['last_name'] . '</td>'; // NON-WORKING
echo '<td>' . $row['user2_id']['first_name'] . ' ' . $row['user2_id']['last_name'] . '</td>'; // NON-WORKING
echo '<td>' . $row['date_time'] . '</td>';
echo '<td>' . $row['location'] . '</td>';       
echo '</table>';
...

(如何)可以檢索first_name / last_name鏈接而無需單獨調用“ users”表? 當我檢查phpMyAdmin時,InnoDB外鍵鏈接似乎正常工作。 提前謝謝了!

如果您的查詢是

$query = "SELECT time, location, user1.first_name, user1.last_name, user2.first_name, user2.last_name FROM meetings m JOIN users user1 ON m.user1_id = user1.id JOIN users user2 ON m.user2_id = user2.id WHERE meeting_id = " . $mid;

然后名稱應為

$row['user1.first_name']

等等。 外鍵不是總是帶入相關記錄的魔術設備(也不應該)。

編輯:
附帶說明-在了解規范化和數據庫設計的人們的腦海中,通常使用以user1_iduser2_id這樣的數字結尾的列會引起user2_id 基本上可以歸結為一個問題-您准備接受會議僅支持兩個人之間的會議嗎? 您應該回答的另一個問題是:您確定要區分會議的“第一”和“第二”參與者嗎? (當前的設計將使回答以下問題變得更加困難,例如-為$user列出所有會議。使用當前的表格布局,您將不得不分別測試兩個字段,這可能會損害性能)

好吧,您必須利用users表從中獲取數據。 那是地方性的。 但是您只能有一個查詢,這就是我想得到的:

SELECT u1.first_name, u1.last_name, u2.first_name, u2.last_name, m.time, m.location from meetings m inner join users u1 on m.user_id1 = u1.user_id inner join users u2 on m.user_id2 = u2.user_id

MySQL文檔

SQL中的外鍵用於檢查和強制引用完整性,而不用於聯接表。 如果要從SELECT語句從多個表中獲取結果,可以通過在它們之間執行聯接來實現:

 SELECT * FROM t1 INNER JOIN t2 ON t1.id = t2.id; 

您不能,user1_id僅包含一個數字,您必須查詢users表以獲取該信息。 幸運的是,可以通過聯接來獲取它:

SELECT u1.first_name, u1.last_name, u2.first_name, u2.last_name,meetings.time, meetings.location FROM meetings
JOIN users u1 ON meetings.user1_id=u1.user_id
JOIN users u2 ON meetings.user2_id=u2.user_id
WHERE meeting_id = 

暫無
暫無

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

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