lostyazilim
tr.link

SQL Sorgusunda Farklı Tablodaki Veriye Göre Sıralama

13 Mesajlar 2.870 Okunma
lstbozum
tr.link

yms yms WM Aracı Kullanıcı
  • Üyelik 04.12.2013
  • Yaş/Cinsiyet 34 / E
  • Meslek Yazılım Geliştirici
  • Konum Samsun
  • Ad Soyad M** K**
  • Mesajlar 277
  • Beğeniler 39 / 62
  • Ticaret 0, (%0)
Merhaba üstadlar.

Başlık biraz karışık ancak elimden geldiğince derdimi anlatmaya çalışacağım.

Gruplar ve Üyeler adlı iki tablo var.

Gruplar tablosu: grup_id, grup_adi
Üyeler tablosu: üye_id, uye_grup

uye_grup sütununda, üyenin bağlı olduğu grubun 'grup_id'si yazılı.

Yapmak istediğim şey; grupları üye sayılarına göre listelemek.

"Select * From Gruplar Order By ???" şeklinde bir sorguya kalkışamadım bile :)

Ne yapabilirim bu sorunu aşmak için?
 

 

@Bean Love getLove()
wmaraci
reklam

tiwaly tiwaly NodeJS / PHP / NoSQL Kullanıcı
  • Üyelik 10.10.2013
  • Yaş/Cinsiyet 34 / E
  • Meslek Yazılımcı
  • Konum İzmir
  • Ad Soyad i** A**
  • Mesajlar 363
  • Beğeniler 135 / 104
  • Ticaret 7, (%100)
Bu tarz durumlar için inner join komutu ile iki tabloyu birleştiriyoruz. Aşağıda örneği mevcut.


SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;

sizin durum için

SELECT * FROM Gruplar INNER JOIN uyeler ON grup_id = uye_grup ORDER BY uye_id
 

 

yms yms WM Aracı Kullanıcı
  • Üyelik 04.12.2013
  • Yaş/Cinsiyet 34 / E
  • Meslek Yazılım Geliştirici
  • Konum Samsun
  • Ad Soyad M** K**
  • Mesajlar 277
  • Beğeniler 39 / 62
  • Ticaret 0, (%0)
Cevabınız için çok teşekkür ederim ancak bu şekilde üye sayısına göre değil de ID'sine göre sıralanıyor. Yapmak istediğim şey; grupları üye sayılarına göre azalan bir şekilde listelemek. Yani üye sayısı fazla olan gruptan, az olan gruba doğru bir listeleme yapmaya çalışıyorum.
 

 

@Bean Love getLove()

tiwaly tiwaly NodeJS / PHP / NoSQL Kullanıcı
  • Üyelik 10.10.2013
  • Yaş/Cinsiyet 34 / E
  • Meslek Yazılımcı
  • Konum İzmir
  • Ad Soyad i** A**
  • Mesajlar 363
  • Beğeniler 135 / 104
  • Ticaret 7, (%100)
Öncelikle özür dilerim soruyu biraz yanlış anlamışım. Veritabanınızı php ile mi kullanıyorsunuz. Çünki sorunuzun cevabı için işin içine biraz programlama katmak gerekli. Kullandığınız dili söylerseniz ona göre bir çözüm üretirim.
 

 

wmaraci
wmaraci

yms yms WM Aracı Kullanıcı
  • Üyelik 04.12.2013
  • Yaş/Cinsiyet 34 / E
  • Meslek Yazılım Geliştirici
  • Konum Samsun
  • Ad Soyad M** K**
  • Mesajlar 277
  • Beğeniler 39 / 62
  • Ticaret 0, (%0)
ASP kullanıyorum ama veritabanı MySQL. Verileri Array'e atayıp fonksiyon kullanayım dedim ancak işin ucu yine "Order By"a gelince sonuna neyi, nasıl ekleyeceğimi bulamıyorum.
 

 

@Bean Love getLove()

tiwaly tiwaly NodeJS / PHP / NoSQL Kullanıcı
  • Üyelik 10.10.2013
  • Yaş/Cinsiyet 34 / E
  • Meslek Yazılımcı
  • Konum İzmir
  • Ad Soyad i** A**
  • Mesajlar 363
  • Beğeniler 135 / 104
  • Ticaret 7, (%100)
O zaman şu şekilde bir yol göstereyim. İlk olarak 2 boyutlu bir dizi oluşturun. Daha sonra gruplar tablosunu veritabanından çekin çektiğiniz verileri while içinden geçirirken her gelen veri için grup numarasını baz alarak uyeler tablosundan veri çekin.

Örneğin: SELECT * FROM gruplar ile verileri çektiniz. Gelen veriler Q dizisinde geldi diyelim
Dönen her satır için SELECT * FROM Uyeler WHERE uye_grup = Q[grup_id] sorgusunu çektiniz. Bu sorguyada Z diyelim. İlk başta oluşturduğumuz 2 boyutlu dizinin adı G olsun.

Şimdi Z sorgusunda gelen verilerin satır toplamı bize hangi grupta kaç üye olduğunu verir.
Q dizisindeki grup_adi sütunundanda grubun adını çekebilirsin bu sayede
G[][0] = grup_adi
G[][1] = Z sorgu sayısı
atarsan elinde grup isimleri ve kişi sayılarından oluşan bir dizi olmuş olur. Biraz karmaşık oldu farkındayım ama sadece SQL ile çözümü olduğunu sanmıyorum. Umarım anlatabilmişimdir.

Dipnot : SELECT * FROM Uyeler WHERE uye_grup = Q[grup_id] sorgusu yerine SELECT COUNT(*) FROM Uyeler WHERE uye_grup = Q[grup_id]; sorgusunu da kullanabilirsin. Bu sorgu sana direkt olarak içeride kayıtlı veri sayısını verir.
yms

kişi bu mesajı beğendi.

yms yms WM Aracı Kullanıcı
  • Üyelik 04.12.2013
  • Yaş/Cinsiyet 34 / E
  • Meslek Yazılım Geliştirici
  • Konum Samsun
  • Ad Soyad M** K**
  • Mesajlar 277
  • Beğeniler 39 / 62
  • Ticaret 0, (%0)
Üstad bu şekilde veriler çekilebiliyor, buraya kadar sorun yok. Ancak grupları ekrana üye sayılarına göre azalan bir şekilde yazdıramıyorum. Sıralamayı yalnızca grupları çektiğim sorguda Order By ile değiştirebiliyorum.

Anlaşılan bunun bir yolu yok. Mecburen Gruplar tablosuna grup_toplam şeklinde bir sütun açıp, üye eklendiğinde ve silindiğinde kaydı güncelleyeceğim.

Sana da çok zahmet verdim. Ayırdığın vakit ve emek için teşekkür ederim.
 

 

@Bean Love getLove()

devrimm devrimm WM Aracı Kullanıcı
  • Üyelik 11.05.2014
  • Yaş/Cinsiyet 46 / E
  • Meslek elektronik
  • Konum İstanbul Avrupa
  • Ad Soyad D** D**
  • Mesajlar 8
  • Beğeniler 1 / 0
  • Ticaret 0, (%0)
Merhabalar: sayın üstadlarım bitürlü çözemediğim bir olay var lütfen yardımcı olurmusunuz.

Bunu bayağı araştırdım örneğini bulamadım. genelde veri tabanından 10 ile 20 arası yada 50 ile 100 arası gibi seçip veri çekmeyi anlatmışlar.
Ama ben rakamı seçmeyeceğim kendim iki adet kutucuk içine yazıp, yazdığım rakamların aralığını listeletmek istiyorum. bunu nasıl yaparız.
Diyelim birinci text kutucuguna 1000 yazdım diğerine ise 2513 yazdım ve ara dedğimde 1000 ile 2513 aralığındaki ilanlarım listelensin. lütfen yardımcı olurmusunuz. birde index.php sayfam harici arama.php sayfam var bu arama.php sayfamada kod eklemelimiyim. bunun örneğini öğrenirsem web sitemde birçok arama seçenekleri yapabilcem. buda benim çok işime yarayacak lütfen yazmaktan çekinmeyin inanın bilgiyi paylaşanların değeri başka.
Not: konuyu buraya açtım umarım yanlış olmamıştır. olduysada kusuruma bakmayın.
 

 

Referee Referee Üyeliği Durdurulmuş Banlı Kullanıcı
  • Üyelik 04.10.2013
  • Yaş/Cinsiyet 32 / E
  • Meslek Bilgisayar Mühendisi
  • Konum Ankara
  • Ad Soyad Ö** A**
  • Mesajlar 504
  • Beğeniler 20 / 127
  • Ticaret 44, (%98)

devrimm adlı üyeden alıntı

Merhabalar: sayın üstadlarım bitürlü çözemediğim bir olay var lütfen yardımcı olurmusunuz.

Bunu bayağı araştırdım örneğini bulamadım. genelde veri tabanından 10 ile 20 arası yada 50 ile 100 arası gibi seçip veri çekmeyi anlatmışlar.
Ama ben rakamı seçmeyeceğim kendim iki adet kutucuk içine yazıp, yazdığım rakamların aralığını listeletmek istiyorum. bunu nasıl yaparız.
Diyelim birinci text kutucuguna 1000 yazdım diğerine ise 2513 yazdım ve ara dedğimde 1000 ile 2513 aralığındaki ilanlarım listelensin. lütfen yardımcı olurmusunuz. birde index.php sayfam harici arama.php sayfam var bu arama.php sayfamada kod eklemelimiyim. bunun örneğini öğrenirsem web sitemde birçok arama seçenekleri yapabilcem. buda benim çok işime yarayacak lütfen yazmaktan çekinmeyin inanın bilgiyi paylaşanların değeri başka.
Not: konuyu buraya açtım umarım yanlış olmamıştır. olduysada kusuruma bakmayın.



Merhaba, sorunuzu doğru anladıysam bir örnek yaptım. Umarım doğru anlamışımdır.








echo "Tüm Sonuçlar"."
";

$cek = mysql_query("select * from tablo_1");
while($cektigini_goster = mysql_fetch_array($cek)){
echo $cektigini_goster['deger']."
";
}

?>


echo "Aralık Sonuçları"."

";

echo "

Deger 1
Deger 2


";

if(isset($_POST['submit'])){
$deger1 = $_POST['deger1'];
$deger2 = $_POST['deger2'];
echo $deger1." ve ".$deger2." arasindaki degerler"."
";
$cek = mysql_query("select * from tablo_1 where deger BETWEEN '".$deger1."' and '".$deger2."'");
while($cektigini_goster = mysql_fetch_array($cek)){
echo $cektigini_goster['deger']."
";
}

}


?>


Daha fazla bilgi edinmek istiyorsan bu konuda "mysql between" kavramını araştır.
devrimm

kişi bu mesajı beğendi.

devrimm devrimm WM Aracı Kullanıcı
  • Üyelik 11.05.2014
  • Yaş/Cinsiyet 46 / E
  • Meslek elektronik
  • Konum İstanbul Avrupa
  • Ad Soyad D** D**
  • Mesajlar 8
  • Beğeniler 1 / 0
  • Ticaret 0, (%0)
Yardımınız için teşekkür ederim. verdiğiniz kodları yerleştirmeye çalıştım ama başarılı olamadım. her seferinde hata alıyorum. çünkü veri tabanımdaki fiyat sütunundan veri çekmem lazım. fiyatı kendim ilan oluştururken form içinde kendim belirliyorum ve emlaklar adlı tablonun fiyat sütununa yazdığım değer kaydoluyor. nasıl oluyorsa fiyatlar örn: 10000 diye kaydediliyor ama çekilmiş hali 10.000 olarak noktalı gösteriyor. bunda sorun yok belki lazım olur diye söyledim.
fiyat bölümü veri tabanında şu şekilde mysql_query("select * from emlaklar where fiyat
ben sadece fiyatı değil aynı zamanda fiyata bağlı ilanların resimleri başlıkları il ve ilçe şeklinde yazılmasını istiyorum. yani o aralıktaki ilanlar düşükten yüksek fiyata sıralansın istiyorum. çok uzun oldu anlatmam sıkılmadan okursunuz inşallah sizide yordum.
index.php sayfam
include("config.php");

$sqlCountry="select id,country_name from country order by country_name asc ";
$resCountry=mysql_query($sqlCountry);
$checkCountry=mysql_num_rows($resCountry);
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION = 'utf8_bin'");


$query = mysql_query("select * from settings");
while($print = mysql_fetch_array($query)){ ?>





<?php echo $print['title']; ?>


<script></script>
<script></script>
<script>$(window).load(function() { $('.blueberry').blueberry(); }); </script>




















  • slayt


  • slayt

















© , . Tüm hakları saklıdır. Powered by : web sitem









Buda arama.php sayfam
include("config.php");
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION = 'utf8_bin'");
$query = mysql_query("select * from settings");
while($print = mysql_fetch_array($query)){ ?>






Arama | <?php echo $print['title']; ?>
























© , . Tüm hakları saklıdır.





<script> function SayiKontrol(e) {
olay = document.all ? window.event : e;
tus = document.all ? olay.keyCode : olay.which;
if(tus<48||tus>57) {
if(document.all) { olay.returnValue = false; } else { olay.preventDefault(); }
}
} </script>




Bu veridiğim kodlarda değişiklik yapmadım. içinde fiyata göre arama var ama sadece tek değer giriyorsun dolayısıyla diğer ilanlar çıkmıyor.