2011-05-05 79 views
1

大家好,感謝您的關注。SQL Server Select語句可以更新相關記錄

我有一個Web窗體掛鉤到SQL Server 2005數據庫。除了提交平面數據之外,我還使用了兩條select語句。第一個填充數據庫中其他用戶名稱的下拉列表。

SELECT Firstname + ' ' + LastName 
FROM KB_XMod_Modules 
WHERE FormID=3 

這很好,但我還需要更新其他用戶的記錄,以顯示當前配置文件已被選中的時間。把它想象成'約翰喜歡保羅',並且在保羅的記錄中它應該表明'保羅很喜歡約翰'。

我一直在掙扎,我已經得到了最接近的是具有形式在此第二條語句...

SELECT Firstname + ' ' + LastName 
FROM KB_XMod_Modules 
WHERE LikedByID = 'Current Record ID' 

這類作品,但問題是,它不會顯示在「保羅的'記錄,他是'約翰'喜歡,直到我打開了,並保存了保羅的紀錄。我將要處理數百個記錄,所以這不能手動完成。我需要一種能夠在保存約翰時直接更新保羅的方法。

理想情況下,我想我想要更新第一條語句,用用戶名填充下拉列表,但也更新提交的相關記錄,但不認爲這是可能的。再次

我剛剛進入SQL,並發現很難找出做到這一點的最好辦法...

感謝。

回答

1

考慮在你的下拉列表的ID,如:然後

SELECT Firstname + ' ' + LastName AS FullName, ID 
    FROM KB_XMod_Modules WHERE FormID=3 

你的下拉菜單可以記住你是哪個人上:

<asp:DropDownList DataTextField="FullName" DataValueField="ID" ..... /> 

讓我們假設保羅喜歡約翰。當你保存「像」,你可以:

UPDATE KB_XMod_Modules 
SET LikedByID = IdFromYourDropDownSelectedValueForPaul 
WHERE ID = JohnID 

還要考慮一個人是否可以由一個以上的其他人士的喜愛。在這種情況下,你需要重構你的數據庫設計:

CREATE TABLES PersonLikes(
PersonID int, 
LikedBy int) 

那麼你只需要:

INSERT INTO PersonLikes(PersonID,LikedBy) VALUES(@PaulID, @JohnID) 
+0

太有趣了 - 當我想出這個例子時,我正在考慮'fab four'。謝謝你的想法。我會模擬一個原型,看看它是怎麼回事... – Willb 2011-05-05 16:09:41

+0

感謝您的解決方案和+1的描述。 – Willb 2011-05-09 12:33:56

0
SELECT u.Firstname + ' ' + u.LastName as UserName, l.FirstName + ' ' + l.LastName as LikedByName 
FROM KB_XMod_Modules as u 
    join KB_XMod_Modules as l on l.LikedById = u.FormId 
WHERE u.FormID=3 

這會加入你的2個查詢爲一體,其中FormId是一樣的LikedById。 如果您取下WHERE u.FormID=3它會顯示所有人都喜歡的記錄。

+0

感謝您的回覆迅速,並請原諒我,如果這是一個愚蠢的問題,但這是不是隻會更新當前的記錄,並保持相關記錄不變?我不知道我明白了。 – Willb 2011-05-05 15:52:47

+0

它實際上不會更新任何東西。這是一個選擇語句,它只會選擇記錄。因此你會知道誰喜歡誰。更新聲明將是一個單獨的操作。我想我以爲你在問一個電話如何讓用戶和他喜歡他。 – taylonr 2011-05-05 18:08:48