Alfabetik bir kullanıcının arkadaş göstermek için en iyi yol

3 Cevap php

Bir sosyal ağ üzerinde PHP / MySQL üzerinde çalışıyorum, ben en ağları yapmak gibi, bir kullanıcının sahip olduğu tüm arkadaşlar gösterecek, bir arkadaş sayfa var. Mysql bir arkadaşım tablo var, bu sadece birkaç alanları vardır. auto_ID, from_user_ID, to_friend_ID, tarih

I would like to make the friends page have a few different options for sorting the results,
1) By auto_ID which is basicly in the order a friend was added. it is just an auto increment id
2) new friends by date, will use the date field
3) By friends name, will have a list in alphabetical order.

Biraz tavsiyeye ihtiyacım var nerede alfabetik olduğunu. Ben K üzerinde bir kullanıcı tıkladığında tüm kullanıcı adı böylece K ile başlayan ve gösterecektir zaman, alfabe AZ bir liste olacak. Hüner çoğu bunu ben bu eylem için isteyen am performans değil, hızlı iddia edecek olsa da, bir seçenek değildir hızlı böylece kullanıcının masada JOIN yapıyor olması ihtiyacı var. Ben Bir fikir benim dostluğumu tabloya ekstra bir alan eklemek ve içinde kullanıcıların adının ilk harfini saklamaktır. Eminim bu bir kullanıcı orada adı her değiştirdiğinde, kayıtların olası binlerce güncellenen yapmak olurdu böylece kullanıcının her zaman orada adını değiştirebilirsiniz.

Bunu yapmak için daha iyi bir yolu var mı?

3 Cevap

Eğer o dostluklar masaya kullanıcının adını veya baş harflerini saklanması, katılmak yapmak istemiyorsanız Peki gerçekten sadece diğer uygun bir seçenektir. Binlerce kayıt bir isim değişiklikleri her zaman güncellemek zorunda sorunu söz, ama bu gerçekten bir sorun mu? Belki de büyük bir sosyal ağ Facebook gibi site veya MySpace bahsediyoruz sürece, really bu sorunlu yapmak için yeterli arkadaşlar ortalama kullanıcı var mı? Ve sonra bir kullanıcı ben hayal ediyorum ki, kendi adını değiştirmek olacağı olasılığı her kullanıcı için çok sık olur şey değildir çarpmak zorunda.

Bu güncellemeler aslında olmayan-önemsiz iseniz, her zaman arka plan ya da yoğun olmayan saatlerde gerçekleşmesi gecikme olabilir. Emin-to-the-ikinci doğruluğunu feda ederim ama gerçekten, çoğu kullanıcı bile fark ederdi? Muhtemelen değil.

Eğer already kullanıcıların bu düzeyleri varsa Edit: Not, gerçekten yukarıda benim cevap geçerlidir. Eğer hala temelde sitenizi geliştirme yapıyorsanız, sadece çalışma alma hakkında endişe, ve gerçek sorunları olunca sorunları ölçekleme endişe.

Ayrıca memcached gibi bir önbelleğe alma çözüm bakmak olabilir. Her zaman bir memcached karma güncellenmesi bir arka plan işlemi olabilir ve bu verileri istediğiniz zaman o bellekte zaten.

Ben sadece adını içeren masaya katılmak ve daha sonra adı sıralamak istiyorum. Oldukça normal bir tablo düzeni varsayarsak:

Table Person: ID, FirstName, LastName

Table Friend: auto_ID, from_user_ID, to_friend_ID, date

Sen gibi şeyler yapabilirsiniz:

Select person.id, person.firstname, person.lastname, friend.auto_id 
from Friend
left join on person where person.id = friend.to_friend_ID
where friend.from_user_ID = 1
order by person.lastname, person.firstname

veya

Select person.id, person.firstname, person.lastname, friend.auto_id 
from Friend
left join on person where person.id = friend.to_friend_ID
where friend.from_user_ID = 1
order by friend.date desc

Gerçekten etrafında ilk harfini tutmak gibi yinelenen verileri (ve senkronize tutarak endişelenmenize gerek) gerek arkadaşı tablodaki bir sütun ekleyerek tavsiye ederim, bunun için ne katıldı bulunuyor.