2013-04-08 76 views
0

我已經問,普遍的回答之前搜索之前不能幫助我的項目檢查兩個用戶的朋友一起在PHP/MySQL的

表結構

users表

用戶ID |用戶名

1|user1 
2|user2 
3|user3 
4|user4 
5|user5 
6|user6 

朋友TABLE

requestuserid | targetuserid

1|3 
1|4 
1|6 
3|2 
3|5 
2|4 
2|1 

現在好了,我的問題是:

如果有用戶ID的用戶ID haved關係我只在用戶通過專賣店表所示:

1|2 

而且不店鋪複製像

1|2 
2|1 

現在我需要檢查user-x與user-y的朋友,如果兩個人朋友php會返回true,否則返回false。 非常可能的,如果我的數據庫中存儲的副本1 | 2和2 | 1,但沒有:(

我怎樣才能做一個查詢

+1

因此,您的朋友表只存儲友誼請求? – barbashov 2013-04-08 22:23:23

+0

@ barbashov是的,只存儲友誼請求 – 2013-04-08 22:24:14

+0

所以如果你只知道用戶1向用戶2請求友誼,那麼我們怎麼能知道用戶2確認了? – barbashov 2013-04-08 22:27:56

回答

4

你會使用OR

SELECT 1 FROM friends WHERE (requestuserid = :id1 AND targetuserid = :id2) OR (requestuserid = :id2 AND targetuserid = :id1)

這個查詢將返回失敗空集,並在成功1。

+0

Thankyou,但查詢羊剪貼板是有幫助和更安全的 – 2013-04-08 22:41:06

+0

對不起,我已經徹底測試過,您的查詢保存更多的資源,只''''替換'任何字段'添加額外的過濾:)現在我將檢查isset ()等驗證方法:)。 – 2013-04-08 22:52:14

+0

如何在連接表格時使用相同的查詢。 當我從某個表中獲取數據時,檢查它是否來自一致的朋友。 – 2015-04-04 16:12:47

1

這個查詢將返回一行,如果用戶的朋友(使用0​​忽略誰TH e目標/請求用戶),或者如果他們不是朋友,則不返回任何內容:

SELECT * FROM users u1, users u2, friends f 
WHERE u1.userid = ?u1 AND u2.userid=?u2 
AND ((u1.userid=f.requestuserid AND u2.userid=f.targetuserid) 
OR (u2.userid=f.requestuserid AND u1.userid=f.targetuserid)) 
+0

由於沒有與表用戶u1和用戶u2的聯接,如果條件匹配,這不會返回很多行嗎?另外,他並沒有說他也需要獲取用戶信息。 – Lumbendil 2013-04-08 22:26:34

+0

你抓住了我中期編輯,添加過濾器只JUST那些2用戶ids。如果你只*需要知道他們的朋友,那麼數據太多。我也將返回所有的用戶數據,這可能是過度的 – 2013-04-08 22:28:58

+0

現在看起來它可以安全使用,但我寧願避免使用*,除非我在控制檯測試查詢,因爲你不知道它會返回什麼,所以我更願意列出所有的字段。 – Lumbendil 2013-04-08 22:31:23

相關問題