Türkiye'nin En Eski Webmaster Forumu İyinet'e Hoşgeldiniz!

Kayıt Ol

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

OsmanAtabey

0
Onaylı Üye
Üye
Katılım
26 Mart 2005
Mesajlar
922
Açılan Konu
52
Tepki puanı
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
Onaylı Üye
Üye
Katılım
26 Mart 2005
Mesajlar
922
Açılan Konu
52
Tepki puanı
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
Onaylı Üye
Üye
Katılım
13 Aralık 2004
Mesajlar
9,603
Açılan Konu
164
Tepki puanı
106
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
Onaylı Üye
Üye
Katılım
26 Mart 2005
Mesajlar
922
Açılan Konu
52
Tepki puanı
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
Onaylı Üye
Üye
Katılım
25 Nisan 2011
Mesajlar
2
Açılan Konu
0
Tepki puanı
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
Onaylı Üye
Üye
Katılım
13 Aralık 2004
Mesajlar
9,603
Açılan Konu
164
Tepki puanı
106
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?
 
Üst