簡體   English   中英

從數據庫中的不同表中獲取記錄

[英]Fetching records from different tables in the database

我的應用程序有一個類似於Facebook的流,其中顯示了各種類型的更新。 因此,它將顯示常規帖子(來自“ posts”表)和事件(來自“ events”表)表,依此類推。

問題是我不知道如何從不同的表中獲取這些記錄,因為它們具有不同的列。 我應該多次查詢數據庫,然后用PHP組織數據嗎? 如果是這樣,怎么辦? 我不確定該如何處理。

非常感謝您的幫助 :)

理想情況下,您只需使用一個JOIN即可在一個查詢中從多個表中獲取數據。 但是,在不了解表模式的情況下,很難提供任何有用的細節。 (除非您從一開始就考慮了這一點,否則極有可能無法實現。)

這樣,您可能還想創建一個通用的“元”表,以通用格式提供每個帖子/事件的信息,並提供一種鏈接到相關表的方法。 (即:它將包含“父”類型和ID。)然后,您可以使用此元表作為“更新”流的源,並根據需要向下鑽取適當的內容。

除非事件和發布彼此相關,否則即使它們顯示在同一頁面上,您也可能要分別查詢它們。

您不會僅僅為了它而使用JOIN。 僅當存在外鍵關系時。 如果您不知道那是什么,那么您就沒有一個。

如果數據表相互關聯 ,則通常可以使用JOIN和UNION的某種組合在單個查詢中獲取數據。 為了獲得更好的答案,您必須發布數據表的結構以及網站所需記錄(合並記錄)的樣本。

如果您不知道列,則可以獲取表元數據,並找出列代表什么以及它們對應的數據類型。
如果您知道哪些列,則可以從多個表中進行選擇,甚至可以使用嵌套的選擇或聯接來獲取數據。

在user_id上加入表,即

Select * from posts p
left join status_updates su on p.user_id = su.user_id
limit 25;

或者如果您的桌子相差太大,那么請先使用臨時桌子

create table tmp_updates
(
 select user_id, p.id as update_id, 'post' as update_type, p.text from posts;
);

insert into table tmp_updates
(
 select user_id, su.id as update_id, 'status' as update_type, su.text from status_updates;
);

Select * from tmp_updates
where user_id = '...'
limit 25;

暫無
暫無

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

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