[英]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.