我有這兩個表:使用mysql的朋友realtionships?
user{id,name,password....};
friends{id,user_id,user_id2,accept(bool)}
例如說,我想爲USER_ID = 14取出的朋友和行接受必須是1!如何將我做MySQL查詢謝謝:)
PS。 fethcing查詢時,它必須是一個2路的事情,如果user1的朋友user2的 也意味着,用戶2是朋友USER1,如果你明白我的意思! :))
我有這兩個表:使用mysql的朋友realtionships?
user{id,name,password....};
friends{id,user_id,user_id2,accept(bool)}
例如說,我想爲USER_ID = 14取出的朋友和行接受必須是1!如何將我做MySQL查詢謝謝:)
PS。 fethcing查詢時,它必須是一個2路的事情,如果user1的朋友user2的 也意味着,用戶2是朋友USER1,如果你明白我的意思! :))
我並不想棄用,但是這是非常,非常基本的SQL,你可以很容易地發現,通過谷歌或書籍的答案。這就是說,這是答案。
SELECT * FROM friends WHERE (user_id=14 OR user_id2=14) AND accept=true;
讓我打破它給你,因爲你使用的是SQL,如果你不學習它,你將浪費大量的時間尋找答案。
SELECT * FROM friends
表示獲取朋友的所有行。 「*」是列名的替代,意思是「所有列」。例如,如果您有
SELECT (id,user_id) FROM friends
返回的行將只包含那些列。
然後是WHERE子句。
WHERE (user_id=14 OR user_id2=14) AND accept=true
意味着它的外觀:您選擇的行應該至少有一個user_id等於14,並且接受應該爲true。 MySQL使用true,false和null(如果允許)布爾值。一些其它數據庫,如MSSQL,其採用了「BIT」類型,而不是一個布爾分別使用1,0或null爲真,假和空。
or子句是因爲,你在你的編輯說,這種友誼可以是「2路」。
所以,如果你把它放在一起,
SELECT * FROM friends WHERE (user_id=14 OR user_id2=14) AND accept=true;
我認爲這會給你重複的結果。 – 2011-02-17 21:19:23
這會給你的每一行的USER_ID = 14接受朋友
SELECT
*
FROM
friends
WHERE
user_id = 14
AND
accept = TRUE
請嘗試以下方法。
select
f1.user_id2
from
user u,friends f1 , friends f2
where
f1.user_id1 = 14,
f1.accept = 1,
f1.user_id2 = f2.user_id1,
f2.user_id2 = f1.user_id1,
f2.accept = 1
感謝, 羅漢
編輯:時纔有意義加入用戶u表,如果你需要朋友的詳細信息。否則,你可以把用戶的桌子拿出來。
我可能不會做,在兩個表。讓我感覺這是用戶之間的多對多關係。您遇到的問題是您在朋友表中限制了「朋友」的數量。這是除非你有朋友表作爲用戶的孩子。我假設朋友表中有一個外鍵指向用戶。我認爲你在那裏的一部分,但不知道爲什麼你有user_id2,因爲它沒有關係意義。在這種情況下,查詢是:
select *
from user
inner join friends on friends.user_id = user.id
where friends.id = true
平請澄清。如果A和B是朋友,則朋友表中有兩條記錄 - >(0,A,B,true); (1,B,A,真)如果雙方都接受了友誼。 (0,A,B,false); (1,B,A,真)如果只有B接受了友誼等等。對嗎? – 2011-02-17 21:32:33