Kullanıcıların bir listesini saklamak ve kullanıcıların o listede olduğunu bildirmek için nasıl

3 Cevap php

Bir kullanıcı "listesine" kişi ekleyebilirsiniz bir site inşa Im. Bu liste kullanıcıya aittir, ama im merak nedir onlar vardır ve kimin yarattığını, listesinde olan insanlara göstermek için, bir fonksiyonun bu liste üzerinden / döngü / almak depolamak için en iyi yolu.

Adlarının listesi oluşturulduktan sonra Yani, ben bir mysql tablo alanında saklamak varsayıyorum, o anda oturum açmış kullanıcının etkileyen herhangi listeleri bulmak için bu tabloyu aramak olacak bir fonksiyon yazmak.

Benim soru iki yönlüdür. İlk olarak, liste sadece (kullanıcı adları boşluk, ancak boşluk ile ayrılmış) 0-9 ve tire ve altçizgi: az olduğunu varsayarak, ne mysql olarak bu depolamak için en iyi alan türü olacaktır. İkincisi, ne çok listeleri arasında bir adı aramak için en iyi / en hızlı yöntemi olurdu?

3 Cevap

Varchar, indeksleme ve ayrıca önbelleğe alma.

Eğer bir kullanıcı adı ve kimliği alan bir UserTable yaratıyoruz. Sonra maçları var yani kimliği bulunuyor birleştiren bir tablo user_relation oluşturun. Tüm yabancı anahtar ilişkileri üzerinde dizinleri yerleştirin. Bu oldukça iyi bir performanceboost vermeli :)

Kurulması için edit bazı ek bilgiler

Table: User UserID - Int (8) - Primary Key, Auto increment Name - Varcahr (30) EmailAddress - Varchar (90) - Unique

Table: UserRelation ID - Int (8) - Primary Key, Auto increment UserID_Source - Int (8), Index (this is the user) UserID_Friend - Int (8), Index (this is a friend / relation from the user)

Bu şekilde kolayca belli bir kullanıcıya ilişkileri saklayabilirsiniz.

Bazı sonuçlar şöyle bir sorgu kullanabilirsiniz almak için:

SELECT `User`.*, `User`.`UserID` AS `UserID_Source`
FROM   `User`
WHERE  `User`.`UserID` = `user_relation`.`user_id_source`

Sen sorguyu uzatabilirsiniz bir ilişki maçları almak ya da bunun için başka bir sorgu kullanmak yönlendirmek için JOIN ;)

Bunu en iyi seçenek kendi satırında her isim saklamak olacaktır.

Liste diğer üyelere başvurular içeriyorsa (MySQL bu tür bir şey için optimize edilmiş gibi) (her kişi kendi listesi vardır) en iyi bahis çeşit bir MySQL tablosunda veri oluşturmak için, örneğin 2 basit gerekir tablolar, tablo bir (kullanıcı tablo) 2 sütun olurdu. ID (INT veya BIGINT), UserName (VARCHAR).

Sonra ikinci tablo (kullanıcı bağlantılar) bağlayan çift yönlü veya tek yönlü feryat bakın yapılırsa bağlı 2 girdileri olurdu.

Bidirectionally: tablo 2 sütun, Kullanıcı1 (INT veya BIGINT) olurdu, Kullanıcı2 (INT veya BIGINT). Listesini almak için, sadece kullanıcı kimliği Kullanıcı1 veya kullanıcı2 birinde tüm girişler için bu tabloyu sorgulamak.

Unidirectionally: tablo 2 sütun, Owner (INT veya Bigint), Kişi (INT veya BIGINT) olurdu. Bir kullanıcı için bir listesini almak için sadece bu kullanıcıya ait tüm girdileri için bu sorgu.

İkisi arasındaki fark, benim listesine eklemek eğer çift yönlü ile, i listenizde otomatik olarak duyuyorum, olduğunu. Tek yönlü ile kaldırıldı, bu yüzden beni listenizde görünmesi için listenize beni eklemek zorunda bile senin listemde. Olduğunu