İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

Mysql 'dan çekilen benzer verileri göstermemek için

OsmanAtabey

0
İyinet Üyesi
Katılım
26 Mart 2005
Mesajlar
922
Reaction score
4
Selam

PHP:
$sorgu = mysql_query("select * from `tablo1` order by `id` DESC limit 10");

while ($parca = mysql_fetch_array($sorgu))
{
$parca1 = $parca['id'];
$parca2 = $parca['kategori'];
$parca3 = $parca['alt_kategori'];

echo $parca1 . " " . $parca2 . " " . $parca3 . "\n";

}

// Çıktısı

100 sepet elma
101 sepet armut
102 sepet elma
103 sepet elma

Yukarıdaki sorgu ile son 10 veriyi aldım fakat aynı alt kategoriye sahip verileri listeletmek istemiyorum. Bunu nasıl yapabilirim ?
 
E

Erturk

Misafir
Urun eklerken Ana kategori ye ayrı, alt kategoriye ayrımı ekleniyor hocam? Ve burada kategori adı neden gorunmuyor ki ?

SQL yapısını filanda bı acıklar ve yazarsan yardımcı olmaya calısırım.
 

OsmanAtabey

0
İyinet Üyesi
Katılım
26 Mart 2005
Mesajlar
922
Reaction score
4
Tablo

- id
- kategori
- alt_kategori
- icerik

Ekleme yapılırken sadece bir tablo kullanılıyor ve alınan veriler ilgili sutunlara gönderiliyor.

Bu şekilde olan bir düzende alt_kategorisi aynı içeriği farklı olan verilerden sadece bir tanesini göstermek istiyorum. Bu tür birşeyi nasıl bir parametre kullanarak yapabilirim sadece o lazım. Çünkü buna benzer birşeyi listeletmede kategori sutunlarını group by ile karşılaştırarak yapmıştım. Fakat buna uyduramadım.
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
Buna bir SQL, bir php çözümünden yaklaşabilirsin.

SQL yaklaşımı, tabloyu kendine bağlamak. Ana tabloda istediğin queryi yapıyorsun aşağıdaki gibi. Ancak farkı tabloyu kendine bağlayıp, alt kategori bazında minimum id olanlara filtreletiyorsun. Bunu tabi MAX(id) olarak da yapmak mümkün. Böylece her bir alt kategoriye ait tek değer geri döner.

Kod:
SELECT kategori,alt_kategori,icerik FROM tablo as a
INNER JOIN 

	(SELECT alt_kategori,MIN(id) as min FROM tablo GROUP BY alt_kategori) as a1
	ON a1.min=a.id


PHP yaklaşımında ise SQL'ye herhangi bir filtre koymayıp filtrelemeyi kodda yapabilirsin.

PHP:
$q = mysql_query("SELECT kategori,alt_kategori,icerik FROM tablo ORDER BY id");

$kontrol = array(); /* kontrol dizisi */

	while ($a = mysql_fetch_Array($q)) {

		if (!in_array($a['alt_kategori'],$kontrol)) { /* bu alt kategori basılmamış henüz */
		echo $a['icerik'].'<br>';
		$kontrol[] = $a['alt_kategori']; /* kontrol dizesine ekleyip bir daha basmasını engelliyoruz. */
 		}

	}

10 satır varsa iki yol aynı şeye çıkar. 1 milyon satır varsa, hepsini PHP ye alıp filtrelemek performans düşürür. İlk yol daha uygun.
 

OsmanAtabey

0
İyinet Üyesi
Katılım
26 Mart 2005
Mesajlar
922
Reaction score
4
Tamamdır php bölümü şu an için işimi görüyor + verdiğin koda desc limit ekledim sorunsuz olarak tekrar eden kategorileri göstermiyor. Ayrıca birinci yöntemi de öğrenmem şart. Teşekkürler Angelo
 

azazel85

0
İyinet Üyesi
Katılım
25 Nisan 2011
Mesajlar
2
Reaction score
0
bunza benzer bir konuda yardıma ihityacım var.

üyeler oy kullanıyor. oylar sayı değer olarak kaydediliyor.

tablo yapısı alttaki gibi

uyeno - puan
1 - 100
2 - 100
3 - 50
4 - 100
5 - 50
6 - 20
7 - 100


burda yapmak isetidiğim şey şu:

aynı puanı veren üyeleri direk eleyeceğim. yani onları gözardı edeceğim.
daha sonra kalan puanlardan en yüksek hangisi ise onu ekrana basacağım.

bunun için nasıl bir sql sorgusu kullanmalıyım ?
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
Aynı puanı veren üyeler derken, 1 kullanıcı iki kere oy verirse şeklinde mi, büyüğünü mü küçüğünü mü alacaksın, tablonun auto-increment serial alanı yok mu?
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Backlink ve Tanıtım Yazısı için iletişime geçmek için Skype Adresimiz: .cid.1580508955483fe5

Üst