2013-12-19 145 views
1

我有4個表格。mysql查詢沒有結束

person ... PersonID, LASTNAME, FIRSTNAME 

users ... PersonID, IsApproved 

membership ... MembershipID, LastActiveYear 

末表把他們捆綁到一起

mempershipperson ... MembershipID, PersonID 

我需要生成列表,顯示;

SELECT 'LASTNAME','FIRSTNAME','PersonID','MembershipID'
WHERE 'LastActiveYear' <= 2013 AND 'IsApproved" = 1

當我運行此查詢下方的接縫一直持續下去。我應該有大約100行。

SELECT LastActiveyear, M.MembershipID, P.FIRSTNAME, P.LASTNAME, U.IsApproved FROM會員M,用戶U,P JOIN membershipperson MP ON MP.PersonID = P.PersonID WHERE LastActiveYear = 2012 AND IsApproved = 1

我很新的這一切,因此它可能是非常明顯的正是我做錯了你。 我一直在爲此奮鬥了幾個星期。所以我的嘗試已經返回了超過700,000行無用的數據。

在某些時候,我需要創建一個php頁面來將所有這些錯誤的IsActive位重置爲'0'。

請注意,這些表格有更多的列,我只是爲這個應用程序顯示相關的列。

謝謝

+2

您沒有爲用戶或成員資格指定加入標準;所以數據庫將每行連接到每一行。 – andrewsi

+0

對用戶和個人進行加入,而不是將其包含在您的FROM部分 –

+0

@andrewsi中,這應該是答案。 –

回答

0
SELECT LastActiveyear, M.MembershipID, P.FIRSTNAME, P.LASTNAME, U.IsApproved 
FROM `membership` M 
    JOIN `membershipperson` MP ON MP.MembershipID = M.MembershipID 
    JOIN `users` U ON U.PersonID = MP.PersonID 
    JOIN `person` P ON P.PersonID = MP.PersonID 
WHERE `LastActiveYear` = 2012 AND `IsApproved` = 1 

你需要從membership向後工作,membershipperson,以usersperson。上面修改的查詢中的JOIN語句就是這樣做的。

+0

謝謝邁克爾,現在我有兩個選擇來看待你的,傑西卡的。這需要一段時間才能嘗試,因此我無法指出答案是否適用於我。 –

+0

@BobCooper - 實際上,他們都給出了相同的答案,只需要單獨訂單中的JOIN即可。 – andrewsi

1
SELECT LastActiveyear, M.MembershipID, P.FIRSTNAME, P.LASTNAME, U.IsApproved 
FROM `membership` M, 
INNER JOIN `users` U ON u.MembershipID = M.MembershipID (or UserID?) 
INNER JOIN `person` P.PersonID onM.PersonID 
INNER JOIN `membershipperson` MP ON MP.PersonID = P.PersonID 
WHERE `LastActiveYear` = 2012 AND `IsApproved` = 1 

只是好奇,爲什麼你有用戶和人作爲兩個不同的表?

+0

非常感謝所有快速響應。我沒有設計數據庫表。它與成員類型有關。如果它是一個家庭,那麼所有家庭成員都會得到相同的'MembershipID',但每個家庭成員都獲得唯一的'PersonID' –