v2.5.2
Giriş yap

Mysql lef join sorunsalı

phpci
424 defa görüntülendi ve 1 kişi tarafından değerlendirildi

Bir arkadaşlık scripti yazmaya uğraşıyorum. Tablolarım aşağıdaki gibi:

Üyeler Tablom:

image

Arkadaşlar Tablom:

image

Arkadaşlar tablomda 1 olan benim ve diğer üyelere arkadaşlık isteği göndermişim ve kabul etmişler.

7 id numaralı kişi de bana arkadaşlık isteği yollamış ve kabul etmişim.

Sql Kodum:

SELECT friend_id, friend_adding_id, friend_added_id, user_id, user_name FROM friends 
LEFT JOIN users ON friends.friend_added_id=users.user_id 
WHERE friend_adding_id=1 OR friend_added_id=1 AND friend_confirm=1 
ORDER BY friends.friend_id DESC LIMIT 1, 10

Burada friend_confirm=1 diğer kullanıcının arkadaşlık isteğini kabul ettiği anlamına geliyor.

(Kişinin profilinde arkadaşlarını listeletmeye çalışıyorum.)

Ama sorguda yanlış yaptığım bir yer var. Son resimdeki friend_id=63 olan kayıttan dolayı kendimi de listeletiyor bunu istemiyorum.

Kendim yerine 7 numaralı üyeyi listeletmem gerek. Sorgumu nasıl düzeltebilirim.

Yardımlarınızı bekliyorum.

makifgokce
1691 gün önce

Ben olsam tabloyu şu şekilde yapardım.

friend_list
owner_idfriend_id
12
13
14
15
21
31
41
51
friend_request
owner_idfriend_idconfirm
121
411
230

Birisi arkadaşlık isteği gönderdiğinde gerekli kontroleri yaptıktan sonra friend_request tablosula kayıt edersin.
Diğer kullanıcı kabul edincede friend_list tablosuna 2 adet kayıt eklersin(hem arkadaşlık isteği göndereni hemde kabul eden kişiyi) ve friend_request teki confirm i 0 dan 1 e güncellersin.
Arkadaşlık listesini çekerkende aşağıdaki gibi çekersin

SELECT user.*, friend_list.* FROM user LEFT JOIN friend_list ON user.user_id = friend_list.owner_id WHERE users.user_id = ?