sql konusunda kendine güvenenlere bir sorum war.

PHP, MySQL, HTML, CSS, SEO vb. ile ilgili genel konular.

sql konusunda kendine güvenenlere bir sorum war.

İleti wdp 01.11.2007, 01:57

merhabalar .
üzerinde çalıştığım yeni projemde sql sorunu yaşıyorum.

konuyu açıklayacak olursak :
veri tabanında yorumlar ve isimler diye iki tablom var .


isimler tablosu şu şekilde :

+-----+-------+-------+------------+------------+-----------+----------+--------+----------+-------|
|--------------------------------------------|isimler|--------------------------------------------|
+-----+-------+-------+------------+------------+-----------+----------+--------+----------+-------|
| iid | isim |
+-----+-------+-------+------------+------------+-----------+----------+--------+----------+-------|
| 1 | mehmet |
| 3 | ali |





yorumlar tablosu şu şekilde :

+-----+-------+-------+------------+------------+-----------+----------+--------+----------+-------|
|--------------------------------------------|yorumlar|--------------------------------------------|
+-----+-------+-------+------------+------------+-----------+----------+--------+----------+-------|
|yid| iid | yorum |
+-----+-------+-------+------------+------------+-----------+----------+--------+----------+-------|
|56 | 1 | yorumlardan biri |
|57 | 3 | baska bir yorum |
|57 | 1 | dahada baska bir yorum |

yid=yorum id
iid= isim id
yorum = yorumlar





şimdi şöle bişey yapmak istiyorum :
en çok yorum yazılan 10 isimi alt alta dizmek :
yani şu şekilde:

mehmet (2)
ali (1)



en çok yorum alanı en üste almalı ve parantez içerisinde yorum sayısını yazmalı.


bu konuda bir çalışma yaptım her isime parantez içerisinde kaç tane yorum olduğunu yazıyorum ama bu isimleri parantez içerisindeki rakamın büyükten küçüğe doğru sıralayamıyorum.

yani sıralama yorum sayısına göre olmuyor isime göre oluyor :


kullandığım kodlar aşağıdaki gibi...

<? $sql6= "SELECT * FROM isimler ORDER BY fadi ASC";
$Calistirlistele6 = mysql_query ($sql6); while(list($v_fid1,$v_fadi1,$v_adres1,$v_ftelefon1,$v_kateid1,$v_yetkili1,$v_ykadi1,$v_ysifre1)=mysql_fetch_array($Calistirlistele6))
{ ?>
&nbsp;<lii>&nbsp;<a style='text-decoration: none' href="isimincele.php?iid=<? print $v_fid1; ?>"><? print $v_fadi1; ?>(<? $sql3= "SELECT COUNT(*) FROM yorumlar WHERE fid='$v_fid1' and durum='Onayli' ";
$Calistirlistele3 = mysql_query ($sql3);
while(list($veri3)=mysql_fetch_array($Calistirlistele3))
print $veri3;?>)</a></lii><br>
<? } ?>



bu kodları nasıl düzenlersek istediğim gibi yaparız sıralamayı ? yorum sayısına göre sıralamalı.



yardımlarınız için tşkkr ederim.
wdp
Üye
Üye
 
İleti: 157
Kayıt: 10.11.2005, 13:15

Re: sql konusunda kendine güvenenlere bir sorum war.

İleti

ALEXIS
01.11.2007, 06:18

Kodlara baktıkça, ucundan da olsa php bildiğimden şüphe ediyorum.

En baştan izlediğiniz yol oldukça kötü. Başarılı bir framework, veya en olmazsa kendi oluşturduğunuz bir framework ile çalışın.

Framefork içinde yer alacak en temel gereksinimleriniz:

* sql sınıfı
* cache sınıfı
* tema sınıfı


Yukarıdaki işlemi standart php ile yapacağım, ancak sizin örneğinizi düzenleyemeğicim.
Kullanıcı avatarı
ALEXIS
Site Yöneticisi
Site Yöneticisi
 
İleti: 2563
Kayıt: 30.06.2005, 09:08

Re: sql konusunda kendine güvenenlere bir sorum war.

İleti

ALEXIS
01.11.2007, 08:26

Kullanım mantığı bana, komutlar php.net'e aittir. Dosya GPL lisanslıdır, istediğiniz gibi kullanabilirsiniz, sadece nereden geldiğini unutmayın. Kod olarak eklenen dosyaların sıkıştırılmış arşiv hali yazının en sonundadır.


Aşağıdaki örnekte, yukarıda verdiğim framework bileşenleri ile ilgili hiçbir sınıf kullanılmadı, direk sayfa içinde mysql bağlantısı yapıldı, ve tüm işlemler mysql komutları ile yapıldı. Acemilerin zorlanmamı için hata fonksiyonlarını da ekledim.

Dosya içinde yeterince açıklama yaptığımı sanıyorum, anlamadığınız yerleri sorabilir (bana güvenmeyin, uzun zaman sonra yanıt verebilirim) veya php.net adresine bakabilirsiniz.


Dosyalar:

database.sql

Kod: Tümünü seç
-- phpMyAdmin SQL Dump
-- version 2.10.3
-- http://www.phpmyadmin.net
--
-- Anamakine: localhost
-- Üretim Zamanı: 01 Kasım 2007 saat 08:08:49
-- Sunucu sürümü: 5.0.45
-- PHP Sürümü: 5.2.3

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Veritabanı: `test_wdp`
--

-- --------------------------------------------------------

--
-- Tablo yapısı: `wdp_isimler`
--

CREATE TABLE `wdp_isimler` (
  `iid` mediumint(8) unsigned NOT NULL auto_increment,
  `isim` varchar(255) collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`iid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=4 ;

--
-- Tablo döküm verisi `wdp_isimler`
--

INSERT INTO `wdp_isimler` (`iid`, `isim`) VALUES
(1, 'ahmet'),
(2, 'mehmet'),
(3, 'veli');

-- --------------------------------------------------------

--
-- Tablo yapısı: `wdp_yorumlar`
--

CREATE TABLE `wdp_yorumlar` (
  `yid` mediumint(8) unsigned NOT NULL auto_increment,
  `iid` mediumint(8) unsigned NOT NULL,
  `yorum` text collate latin1_general_ci,
  PRIMARY KEY  (`yid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=5 ;

--
-- Tablo döküm verisi `wdp_yorumlar`
--

INSERT INTO `wdp_yorumlar` (`yid`, `iid`, `yorum`) VALUES
(1, 1, 'ahmet - yorum 1'),
(2, 1, 'ahmet - yorum 2'),
(3, 1, 'ahmet - yorum 3'),
(4, 2, 'mehmet - yorum 1');

sirala.php

Kod: Tümünü seç
<?php
/**
*
* @version $Id: sirala.php
* @copyright (c) 2007 Canver Software
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

// mysql erişim ayarları
$sunucu     = 'localhost';
$veritabani = 'test_wdp';
$kullanici     = 'root';
$parola     = '';
$tablo_onek    = 'wdp_';

// mysql tablo adları
define('KULLANICI_TABLE',     $tablo_onek . 'isimler');
define('YORUM_TABLE',         $tablo_onek . 'yorumlar');


// mysql bağlantısı aç
$baglan = mysql_connect($sunucu, $kullanici, $parola);

// bağalantı sağlanamaz ise hata ver
if (!$baglan)
{
    die (
'MySQL ile veri bağlantısı kurulamıyor!');
}

// veritabanı seç
mysql_select_db($onek . $veritabani, $baglan) or die('Veritabanı açılamıyor!' . mysql_error());

// [+] kullanıcıları listeleme sorgusu
$sql = 'SELECT * FROM ' . KULLANICI_TABLE . ' ORDER BY isim ASC';
$sorgu = mysql_query($sql);

if (!
$sorgu)
{
    die(
mysql_error());
}

while (
$row = mysql_fetch_assoc($sorgu))
{
    echo
$row['isim'] . ' (' . yorum_sayisi($row['iid']) . ')<br />';
}
mysql_free_result($sorgu);
// [-] kullanıcıları listeleme sorgusu

/**
* yorum_sayisi
*
* verilen kullanıcı id'e göre yorum sayısını geri döndürür
*/
function yorum_sayisi($iid)
{
    
// [+] yorum sayısı bulma sorgusu
    
$sql = 'SELECT COUNT(distinct yid) AS yorum_sayisi FROM ' . YORUM_TABLE . " WHERE iid = $iid";
    
$sorgu = mysql_query($sql);
    
    
// sonuç alınamaz ise mysql hatası ver
    
if (!$sorgu)
    {
        die(
mysql_error());
    }
    
    
$row = mysql_fetch_assoc($sorgu);
    
    
mysql_free_result($sorgu);
    
// [+] yorum sayısı bulma sorgusu    

    
return $row['yorum_sayisi'];
}

// bağlantıyı kapat
mysql_close($baglan);

?>


Önizleme resmi:

Resim
Eklentiler
wdp.rar
(1.55 KiB) 1160 defa indirildi
Kullanıcı avatarı
ALEXIS
Site Yöneticisi
Site Yöneticisi
 
İleti: 2563
Kayıt: 30.06.2005, 09:08


Internet Teknolojileri



Kimler çevrimiçi

Bu forumu görüntüleyenler: Kayıtlı kullanıcı yok ve 0 misafir

cron