Dostluk Sistem Sql Yapısı ve

4 Cevap php

Ben bir dostluk kodlama sistemi yaşıyorum ve bu iki tablo vardır.

members

  • kimlik
  • kullanıcı adı
  • şifre

friends

  • kimlik
  • user_kimlik
  • friend_kimlik
  • durum

En i bir sorguda bu nasıl mümkün üyesi $ Kimliğinin arkadaşlar kimlikleri seçebileceğiniz bir sorgu istiyorum diyelim?

Ben 2 sorguları yapmak için bir çözüm bulundu. Yumruk user_kimlik = $userId arkadaşlar VE friend_kimlik = $userId, ikinci seçer arkadaş seçer ve sonra bir dizkimlike bunları MIX. Başka bir çözüm varsa bunu kullanmak için gkimlikiyorum.

SQL yapısı ve hem lütfen herhangi bir fikir Sorguları?

4 Cevap

Kullanın:

SELECT f.friend_id
  FROM FRIENDS f
 WHERE f.user_id = $user_id
UNION
SELECT t.user_id
  FROM FRIENDS t
 WHERE t.friend_id = $user_id

Kullanımı UNION çiftleri kaldıracaktır. UNION ALL daha hızlı olurdu, ama çiftleri kaldırmaz.

Eğer MEMBERS tablodan arkadaşlar için bilgi almak istiyorsanız, kullanın:

SELECT m.*
  FROM MEMBERS m
  JOIN (SELECT f.friend_id 'user_id'
          FROM FRIENDS f
         WHERE f.user_id = $user_id
        UNION
        SELECT t.user_id
          FROM FRIENDS t
         WHERE t.friend_id = $user_id) x ON x.user_id = m.id

BTW: I hope you're using mysql_escape_string on the variables, otherwise you risk SQL injection attacks: alt text

Sen kullanmayı deneyin gerekir

SELECT  m.*
FROM    friends f INNER JOIN
    	members m ON f.friend_id = m.user_id
WHERE   f.user_id = $userId

Bu tüm Friends bilgi verecek

Bir görünüm elde HEM var

SELECT  DISTINCT CASE WHEN f.user_id = $userId then f.friend_id else f.user_id END CASE
FROM    friends f 
WHERE   f.user_id = $userId
OR  	f.friend_id = $userId

Neden 1 dostluk için 2 satır eklemek değil. Örneğin:

Kullanıcının biz 2 kullanıcı arkadaş olacak var diyelim

User_id : 1 & Friend_id : 2

insert into friends (user_id, friend_id, status) values (1,2,0)    
insert into friends (user_id, friend_id, status) values (2,1,0)

böylece basit bir seçme sorgusu ile kolayca seçebilirsiniz.

Ayrıca muhtemel bir sonraki soruya "Karşılıklı Arkadaş bulmak için nasıl" için ağrı kolay olacaktır.

Eğer gibi basit birşey soruyorsun beri:

SELECT friend_id FROM friends WHERE user_id = id; [fill in the id]

Sana meraklısı bir şey vereyim:

SELECT * FROM members AS m
WHERE m.id
IN (SELECT f.friend_id FROM friends AS f
  WHERE f.user_id = (SELECT pm.id FROM members AS pm
    WHERE pm.username = 'amindzx'));

Bir alt sorgu üzerinde katılmak daha iyi olurdu kullanarak Verilen.

Ayrıca, bir id arkadaşlar sütununda gerek var, çünkü user_id ve friend_id bulunmalıdır arasındaki tek ilişki; Bu iki ağızdan id sütun olarak tanımlanabilir.