簡體   English   中英

需要基於一個表中的記錄從多個表中選擇

[英]Need to select from multiple tables based upon records in one table

這種情況。 我有一個稱為地圖的表格,其坐標架構如下所示:

map_coordinates:
item | item_id | latitude | longitude

想法是該表包含不同項目的坐標列表,它們可以是注釋,分類發布,事件等。我希望能夠對其進行設置,因此結果如下:

item | name of item | latitude | longitude

考慮所有事件,分類和注釋都在單獨的表中。 我該如何設置它,因為我需要在google地圖上顯示所有坐標以及該元素的名稱,即如果它是分類的-廣告標題,事件的標題等,而無需進行大量的SQL查詢。

我有代碼可以在地圖上顯示它-我只需要獲取這些細節即可。 還是我必須在這里重做數據庫設計?

========================

編輯

實際上我的數據庫中有很多表,例如注釋,分類和事件等。重點是maps_coordinates表中的一項是指元素的類型,即,如果其注釋或事件以及item_id是實際的ID那個事件。 我不想在這里使用聯接,因為那樣會涉及很多表。 此外,我只需要獲取標題中的基本信息即可幫助填充地圖,因此當我將鼠標懸停在各個標記上時,不必進行ajax調用即可僅在標記處顯示元素的基本信息。

其他表有其自己的定義,但所有表都有相似的標題字段,我希望在與坐標相同的元組中顯示此標題字段。 還是我應該在這里對我的表進行非規范化,並在map_coordinates中有一個標題重復的條目?

您可以通過創建一個視圖來實現此目的,該視圖結合了單獨表中的每個公共元素。 在示例注釋中,分類信息,事件等。

CREATE VIEW viewCommonElements
AS

SELECT 
100      as DataType,
NoteId   as ElementId,
NoteName as ElementName
FROM Notes

UNION

SELECT 
200                as DataType,
Classified_Post_Id as ElementId,
Post_Description   as ElementName
FROM Classified_Posts

UNION

SELECT 
300                as DataType,
EventId            as ElementId,
EventName          as ElementName
FROM Events

只需為要包含在公共元素中的每個表添加一個新的DataType。 現在,您可以設置一個查詢,該查詢連接到viewCommonElements視圖。

如果以后要創建一個新元素,只需修改視圖並添加聯合選擇塊 ,使其具有唯一的數據類型 您可以使用DataType來區分不同的公共元素。

我已經多次使用此方法來協調不相似但通用的數據。

是的,基本上您的數據庫設計不好。 像這樣嘗試:

map_coordinates:
item | item_id | item_type | item_name | latitude | longitude

並為item_types使用查找表。

您說“想法是該表包含不同項目的坐標列表,它們可以是注釋,分類發布,事件等”。 這是否意味着針對不同項目有不同的表格? 如果是這樣,帶有所有查找信息的非規范化表可能是最好的選擇。 如果不是,那只是聯接兩個表的問題。

暫無
暫無

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

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