2012-11-22 128 views
0

我是新來的PHP和MySQL,我嘗試了2天創建一個Web應用程序,它可以存儲有關用戶從窗體中的特定數據,並允許用戶基於類似的稍複雜的形式。我得到的表單工作,也輸入到數據庫,但我有接收來自MySQL的數據的問題,也許將來我也會與搜索功能,但我沒有多少考慮。現在我專注於從db中獲取特定數據。有多個連接的查詢和太多的結果返回

SELECT players.*, 
    brackets.name AS interested_in, 
    classes.name AS looking_for, 
    tags.name AS tagged_with 
FROM players JOIN player_brackets ON (players.id = player_brackets.player_id) 
JOIN brackets ON (player_brackets.bracket_id = brackets.id) 
JOIN player_classes ON (player_brackets.player_id = player_classes.player_id) 
JOIN classes ON (player_classes.class_id = classes.id) 
JOIN player_tags ON (player_classes.player_id = player_tags.player_id) 
JOIN tags ON (player_tags.tag_id = tags.id) 
WHERE players.id = '18' 

我有這個疑問,工作正常,但我從中得到的數據是在數據庫中的數據的每一個組合,其目前約100項多成果,這是幾乎一樣的。它將數據結果乘以數據庫中的字段數,例如玩家(1)*括號(3)*類別(11)*標記(5),它將輸出165行幾乎相同的數據,其中括號,類別和標籤。

如果我將結果分組players.id,我只得到一行,但來自其他字段的數據丟失。我想得到1行將包含所有它(col可能與數組中的多個數據)。

DB有7個表 - 玩家,標籤,類,括號和3個表,其中包含玩家ID和標籤/類/括號id組合。

我一直在尋找網頁和SO但沒有真正幫助了我。如果有人能幫助我解決這個問題,那將會非常好。感謝您的回覆,我很抱歉我的英文不是我的主要語言。

+0

你不是應該使用INNER JOIN代替JOIN? –

+0

INNER JOIN和JOIN爲我輸出完全相同的結果。我也嘗試了SELECT DISTINCT,但它們都一樣。 –

+2

你可以在這裏發佈你的模式嗎?還有,「GROUP BY players.id」怎麼樣? –

回答

0

當你加入,MySQL是要給你每一個組合。

正如你所看到的,你可以GROUP BY,但隨後它只會給你一個組合。

我認爲你正在尋找一系列的查詢(「獲得玩家1的所有括號」,然後「獲得玩家1的所有職業12」)等等。

或者你可以在應用智能分析的結果。

還有GROUP_CONCAT,但很少滿足任何人的需求(因爲它返回爲一個字符串)。

+0

因此,如果我想輸出的格式像多維數組這樣會包含每行的字符串/ int而不是數組的多標籤比我需要多個查詢,對嗎?我不想這樣做,因爲它會減慢程序的運行速度,但如果它的方式比我想的更糟糕,那麼將所有內容存儲在一張表中並將多個標籤轉換並存儲爲字符串而不是輸出時會更好串返回到一個數組。 –

+0

您的查詢應該足夠快,以使其中有多個不會以任何明顯的方式減慢您的速度。我不會建議在這個階段對數據進行非規範化處理。 –

+0

謝謝你,我重寫了db結構和它的工作正常。你說得對,速度差異很小,以至於它不重要,所以我會試驗你將來的建議。 –