php ile yorumları beğeni durumuna göre sıralamak

Kodla Büyü

yanıyosun fuat abi

Aktif Üye
Mesajlar
123
arkadaşlar şimdi bir yorum sistemi olduğunu düşünelim. yorum tablosunda "oy_up" ve "oy_down" şeklinde iki sütun var. yoruma verilen + ve - oyların kaydını tutuyor. yorumlar select ile "önce yeniler" "önce eskiler" ve "önce beğenilenler" olarak sıralanıyor ve yorumlarda sayfalama sistemi değil "devamını yükle" sistemi kullanılıyor. facebook ve twitter tarzı.

şimdi sayfayı eklenme sırasına göre sıralattığımda 20 tanem mesaj sıralanıyor diyelim ve altında "devamı" yazıyor. devamı deyince üsttekilerin altına bir 20 mesaj daha yükleniyor. bu tüm mesajlar bitene kadar bu şekilde devam ediyor. eklenme tarihine göre yaparken problem yok çünkü devamını yüklerken ki sql sorgumda "select * from yorumlar where id<$sonmesaj_id limit 20" tarzı bir sorgulama yapıyorum. yani 20. mesajın id numarasını alıp daha küçük ya da daha büyük id numarasına göre sıralatıp doğru sonuca ulaşıyorum.

problem "önce beğenilenler" dediğimde ortaya çıkıyor. bunu seçtiğimde oy_up-oy_down sayısına göre büyükten küçüğe doğru 20 tane yorumu güzelce sıralıyor. ama işte "devamı" bölümüne tıklayınca nasıl bir sorgu yapıcam? ben şuan son yorumun net oy sayısını alıp "select * from yorumlar where oy_up-oy_down<$oy_up-$oy_down limit 20" şeklinde yapıyorum. işte sorun tam da bu nokta.

mesela sayfayı açar açmaz 20 tane yorum sıralansın ilk mesajın oy sayısı +20 olsun sonra sırayla +19 diye gitsin son mesaj +3 olsun. ama daha bundan sonra 10 tane daha +3 oy alan yorum olduğunu düşün ama ben devam linkine tıkladığımda sorguda küçüktür ibaresi olduğu için +2 olanlardan devam ediyor. küçük eşit yapsam bu defa tüm +3'leri tekrar sıralıyor. neye göre nasıl sıralayacağımı şaşırdım. bu konuda fikir yürütebilecek olanların yardımını bekliyorum.
 
limit $a,$a+20 olsun yanisi limit 0,20 arası gibi istediğin aralıktakileri seçersin devam a bastıkça da $a=$a+20 olur.
 
kutlu_han hocamın dediği gibi sql sorgusunu
select a,b,c,d, fark as oy_up-oy_down from yorumlar order by fark limit x,x+20
şeklinde değiştirerek yapılabilir sanıyorum.
Koyu yazdığım bölümden emin değilim, eğer oy sunucu tabloda ayrıca verilse çok kolaydı.
 
arkadaşlar bu yöntem sayfalamada kullandığım bir yöntem ama bu sistemde zor gibi. benim projeme ters yani.

Kod:
if($yorumSirala == 1) $yorumSirala2 = "ORDER BY id ASC";
	if($yorumSirala == 2) $yorumSirala2 = "ORDER BY id DESC";
	if($yorumSirala == 3) $yorumSirala2 = "ORDER BY oy_up-oy_down DESC";
	/////////////////////
	$bilgiAl = dbarray(dbquery("select * from yorumlar where id = $lastmsg"));
	if($siraTuru == 1) $siraTuru2 = "id>".$lastmsg;
	if($siraTuru == 2) $siraTuru2 = "id<".$lastmsg;
	if($siraTuru == 3) $siraTuru2 = "oy_up-oy_down<".$bilgiAl['oy_up']."-".$bilgiAl['oy_down'];

$result = mysql_query("SELECT * FROM yorumlar where m_id=".$m_id." and $siraTuru2 $yorumSirala2 limit 8");

sıralama 1 ve 2 de problem yok ama 3 deyince yani beğenilme durumuna göre sırala deyince bahsettiğim hata oluşuyor. buraya sizin dediğiniz sistemi nasıl uygulayabilirim?
 
BBNET
Geri
Üst