我有幾個表:MySQL的大型關係型查詢
letter_mail
index
sent
from
to
template
public
stamp
stationery
title
content
opened
letter_user
index
username
password
在letter_mail所有行的關係,除了指數,公共並打開了另一張桌子。
from和to在letter_mail中對應於letter_user的索引。我想要的是從數據庫中提取所有數據,如果可能,最好在一個查詢中提取。 A *選擇上letter_mail
一行將產生多少這樣的結果:
index:1
sent: 2013-10-03
from:1
to:2
template:1
public:1
stamp:1
stationery:1
title: 1
content: 1
opened : 0
我需要什麼,是上述從相關表填充數據的信息,並JSON
編碼。看起來有點像這樣:
index:1
sent: 2013-10-03
from: {1, John}
to: {2, Jane}
template: {index: 1, template: "standard template", url: "template_name"}
public: 0
stamp: {index: 1, stamp: "standard stamp", url: "some/url"}
stationery: {index: 1, stamp: "standard stationery", url: "some/url"}
title: {index: 1, title: "some title"}
content: {index: 1, content: "some text content"}
opened : 0
這是完全瘋了嗎?我應該把查詢分解成幾個比特還是將所有內容整理到一張表中?
select
mail.index,
mail.sent,
mail.opened,
mail.public,
FromU.username as FromUser,
ToU.username as ToUser,
T.template as TemplateName,
T.url as TemplateURL,
S.stamp,
S.url as StampURL,
S.stamp Stamp,
STA.url StationaryURL,
Ttl.title,
C.content
from
letter_mail mail
JOIN letter_user FromU
on mail.from = FromU.index
JOIN letter_user ToU
on mail.to = ToU.index
JOIN letter_templates T
on mail.template = T.index
JOIN letter_stamps S
on mail.stamp = S.index
JOIN letter_stationery STA
on mail.stationery = STA.index
JOIN letter_title Ttl
on mail.title = Ttl.index
JOIN letter_content C
on mail.content = C.index
的查詢工作,但不會返回任何行:
,如果您需要了解更多信息:)
溶液在該請告訴。
並不瘋狂 - 儘管最終會有大量的重複數據在單個查詢中同時獲得。這是否是一個好主意取決於數據的數量以及從Web服務器到數據庫的接近度/連接。 – Orbling
我只是想避免有9個選擇查詢,但如果這是需要的話......是的。我可以將查詢中的所有數據存儲在主表中,但這在查詢一件事情時也會產生開銷。 此外,如果人們downvote,請告訴爲什麼:) – Eirinn
是不是我 - 有些人只是記下他們認爲基本的任何問題。除非應該將所有數據放在一張表中,否則應避免數據重複,並且是關係數據庫的主要觀點。您應該只需要兩個查詢,但每個表只有一個查詢。鏈接可以用PHP完成。 – Orbling