簡體   English   中英

在表A中選擇需要表B中信息的列的最簡單方法是什么?

[英]Simplest way to select a column in table A that need info from table B?

我有兩張桌子:

表A存儲用戶信息:

Name | Sex | Location | Other | User_ID

表B存儲該消息的私人消息和發送者,接收者:

Message_content | Sender_ID | Receiver_ID | Message_ID

現在給定一個用戶(接收者)名稱,我想獲取消息內容和發件人的名稱,是否可以在一個簡單的查詢中完成它?

我下面的代碼只能獲取Message_content而不是發件人姓名:

$result = mysql_query("SELECT PersonalMsg.content FROM PersonalMsg 
INNER JOIN UserDB ON UserDB.User_ID=PersonalMsg.Receiver_ID 
WHERE UserDB.Name = '$userName'"); 

順便說一下,我剛開始使用表B,如果這個表的設計不好,請告訴我,無論如何我都沒有設計數據庫的經驗。 提前致謝!

是的,你可以通過添加另一個連接:

SELECT PersonalMsg.content, u2.Name FROM PersonalMsg INNER JOIN UserDB u1 ON UserDB.User_ID=PersonalMsg.Receiver_ID INNER JOIN UserDB u2 ON UserDB.User_ID=PersonalMsg.Sender_ID WHERE u1.Name = '$userName'

有兩件事情你真的應該改變:

  • 停止使用mysql_query()(改用pdo
  • 使用預准備語句來緩解sql注入攻擊

再次在Sender_ID上加入UserDB表。

就像是:

SELECT p.Message_content, u2.Name FROM PersonalMsg p
LEFT JOIN UserDB u1 ON u1.User_ID=p.Receiver_ID
LEFT JOIN UserDB u2 ON u2.User_ID=p.Sender_ID
WHERE u1.Name = '$userName'

您必須在數據庫設計中使用表B中的表A Primary。 然后用

$resutl = "select a.name,b.Message_content from Table-A as a, Table-B as b where a.User_ID = b.User_ID";

暫無
暫無

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

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