Bir Facebook gibi haber besleme için veri sorgulama

2 Cevap php

Kullanıcıların onların ruh halleri, profillerini güncellemek ve fotoğraf eklemek bir sosyal ağ sitesi var.

Şu anda aşağıdaki yapıya sahip "update_log" adlı bir tablodaki tüm güncelleştirmeleri giriş ediyorum:

update_id int (auto), 
userid int, 
update_type int (1=profile, 2=photo, 3=mood)
pictureid int
mood_a int
mood_b int
mood_c int
update_time int

Profile update record: (auto), 1, 1, 0, 0, 0, 0, 1239003781

Photo update record: (auto), 1, 2, 11544, 0, 0, 0, 1239003781

Mood update record: (auto), 1, 3, 0, 1, 490, 70, 1239003781

Fotoğraf, kayıt için başlık ve dosya / konum verilerini tutan bir tablonun userphotos var

Ruh için, (yani, ben tembel = \ değilim) duygudurum açıklamaları tutan bir ruh hali arama tablosu var

Ne yapmam gereken bir kullanıcının profil sayfasında göstermek için bu verileri sorgulamak, bu faaliyetin son x saat boyunca sevdikleri herhangi bir kullanıcı için bu yem gösterecektir.

Ben çalıştırıyorum sorun bir kullanıcı bir yarım saat falan boyunca beş fotoğraf yüklediğinde, ben sadece yem bir satır değil, her fotoğraf yüklemesi için bir giriş olmak istiyor.

Aynı profil güncellemeleri için de geçerli.

Kullanıcı bu gibi bir şey göreceksiniz bu yüzden verileri sorgulamak gerekir:

user x updated their mood! (I'm tired) on Apr 4, 2009 10:35 pm
user y uploaded x new photos on April 4, 2009 10:20 pm
user x updated their profile on April 4, 2009 10:15 pm

Nasıl bir kayıt içine ben grup fotoğraf güncellemeleri birbirlerinin bir saat diyelim içinde olmanın tüm kayıtlara dayalı bir sorguda döndürülen mı?

Bir sorgu ile bunu yapmanın bir yolu var mı?

Teşekkürler!

2 Cevap

Sen gibi bir şey istiyorum

SELECT * FROM update_log WHERE update_time > NOW() - 30 MINUTES;

30 dakika zaman periyodu olmak geri arıyoruz.

Ben sadece tek bir sorguda son 30 dakika güncelleştirmeleri dönmek nasıl bilmeniz gereken varsayarak yaşıyorum.

Eğer 30 dakikalık bloklar halinde birlikte grubun tüm fotoğrafları için çalışıyorsanız, son iki gündür, sen [birincil anahtar, kimliği ve zaman içeren veritabanı yapısını değişen ve bir photo_group tablo oluşturarak daha iyi olurdu demek yaratma] ve update_log tabloya group_id sütun ekleyerek.

Yeni bir fotoğraf eklerken, son 30 dakikada o kullanıcı tarafından oluşturulan mevcut bir grup için kontrol edin.

SELECT * FROM photo_group WHERE user_id = XXX AND created > NOW () - 30 MINUTES;

Biri yoksa, oluşturun. Update_log de group_id olarak photo_group tablonun birincil anahtarı ekleyerek yeni Fotoğrafları bağlantı.

Daha sonra satır almak, size betik dili kullanarak group_id tarafından grup onları yapabilirsiniz.

Bu yöntemin dezavantajı gruplama yapısı yeni gruplar yaratmak için kuralları değiştirmek zaman önceki girişleri eski gruplarına göre gruplanmış olacak gibi, daha sonra değiştirmek zor olacaktır.

Eğer gruplarını saklamak olmadan bunu yapmak istiyorsanız, eğer gruplar onunla bir dizi fotoğrafları aşağıdaki, bir fotoğrafın oluşturma zamanı denetler bir döngü fotoğrafları gruplanarak tarafından betik dili mantığı ele almak gerekecek onlar belirli bir süre içinde oluşturulan veya önceki sığmadı En son fotoğraf kullanarak, döngü yeniden başlatır olmuştur. Bu yeni bir tablo ekleyerek daha fazla havai olurdu, ama daha sonra değiştirmek daha kolay olurdu.

Bunun yerine, SQL sorguları daha PHP ile bunu yapmak için çalışıyoruz düşündünüz mü? Size (bu zamanlarda arasındaki tüm güncellemeler) ihtiyaç sonuçlarını sorgulamak ve daha sonra gruplandırılmış nasıl olması gerektiğini belirlemek için damgaları karşılaştırmak için PHP kullanmak için daha az karmaşık olabilir.