• 15-08-2009, 22:38:15
    #1
    Arkadaşlar aşağıdaki MySQL sorgum'un son satırı hata veriyor, ama son satırı kaldırdığım zaman da yine kalan son satır hata veriyor.

    <?
    for($i=0;$i<1;$i++)
    	{
    $kategoriler=mysql_fetch_array( mysql_query("SELECT jos_content.id, jos_content.title, jos_content.image, jos_content.introtext, jos_content.statu"
    . "\n jos_categories.name"
    . "\n FROM jos_content"
    . "\n INNER JOIN jos_categories ON jos_content.catid = jos_categories.id"
    . "\n INNER JOIN jos_sections ON jos_content.sectionid = jos_sections.id"
    . "\n WHERE jos_content.sectionid='4'"
    . "\n ORDER BY jos_content.created"
    . "\n DESC LIMIT $i,1"));
    
    ?>
    Verdiği hata ise şu:

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /www/deneme/kategoriler.php on line 16
  • 15-08-2009, 23:12:20
    #2
    Üyeliği durduruldu
    Burda ne yapmaya çalıştığınıda yazar mısın ona göre yardımcı olalım
  • 15-08-2009, 23:26:52
    #3
    Amacım son 10 içeriği sıralamak AMA categorilere göre.
    İçerikler jos_content içinde.
    İçerikler eklenirken categori seçiliyor, dolayısıyla jos_content içinde catid hanesine kategori ID'si ekleniyor.
    Kategorilerim jos_sections adlı bölümler tablosu içinde açılmış.
    Şimdi ben INNER JOIN ile jos_content, jos_categories ve jos_sections 'ların ID hanelerini birbirine bağladım.
    Hep yaptığım bir işlemdir bu, pek çok işte kullanmışımdır.
    Ancak burada bir türlü olmadı. Dediğim hatayı veriyor.
    Ustaların konuya değinmesini bekliyorum.
  • 15-08-2009, 23:31:36
    #4
    Üyeliği durduruldu
    Beni aşıyor sanırım ama neden bu kadar kastığını anlamadım açıkçası? Şu şekilde olmuyor mu?

    catid = $_GET['catid'];
    mysql_query("SELECT * FROM yazilar WHERE catid='$catid' ORDER by ID DESC LIMIT 0,10");
    Bu şekilde de istediğini yapıyorsun sanırım. O kategorideki son 10 yazıyı çekecektir bu kod.

    INNER JOIN kullanımını bilmiyorum, neden kullandığınıda açıklarsan öğrenmiş olurum.
  • 15-08-2009, 23:44:46
    #5
    INNER JOIN kullanımını memnuniyetle anlatayım.

    Şimdi varsayalım ki yazdıracağımız bir konunun bilgileri 6 TABLO arasında paylaşılmış. Şöyle ki?

    ÖYKÜLER, YAZARLAR, TÜRLER, DİLLER, YAYINEVİ, YILLAR şeklinde 6 tane tablomuz var. Biz bir öyküyü sitemize eklerken başlık, spot ve öykünün devamını forma yerleştiriyoruz ama formda öykünün yazarının adını listeden seçiyoruz, aynı zamanda türünü, dilini, yayinevi adını ve yayın yılını da formdaki opsiyonllerde seçiyoruz ve KAYDET tuşunu basıp ekliyoruz.

    Şimdi ÖYKÜLER tablomuzun elbette ID'si var ama, diğer şeyleri de seçtiğimiz için yazarid, turid, dilid, yayinevid, yilid diye diğer opsiyonellerin de ID'leri kaydedildi. Çok güzel.

    Şimdi ana sayfamıza öykülerimizi yazdıracağız ya, ORDER BY yazarid yaparsak yazarlara göre seçecek ama yazarid 15 olan birinin yazar ADI'nın ne olduğunu nasıl öğreneceğiz. İşte burada INNER JOIN'den yararlanıyoruz.

    "SELECT id, oykuler.yazarid, oykuler.turid, oykuler.dilid, oykuler.yayinevid"
    . "\n FROM oykuler"
    . "\n INNER JOIN yazarlar ON oykuler.yazarid = yazarlar.id
    . "\n INNER JOIN turler ON oykuler.turdid = turler.id
    . "\n INNER JOIN diller ON oykuler.dilid = diller.id
    . "\n INNER JOIN yayinevi ON oykuler.yayineviid = yayinevi.id"

    İşte şimdi her bir tablonun ID'sini ÖYKÜLER tablosundaki ilgili yer ile eşitledik.
    Böylece yazarlar tablosundaki 15'indi ID'nin ADI Yaşar Kemal ise, YAZARLAR.yazarid 'nin ID numarasının adı da Yaşar Kemal oluyor ve ekrana onu yazıyor.
  • 16-08-2009, 00:59:46
    #6
    Üyeliği durduruldu
    Hocam bende benzer şeyi yapıyorum, mesela:

    $sor = mysql_query("SELECT * FROM oteller WHERE onay='1' ORDER BY id DESC LIMIT $basla, $artmasayisi");
                  while ($kayit = mysql_fetch_array($sor)) {
                $id = $kayit['id'];
                $seo = $kayit['seo'];
                    echo "<div class='resim'>";
                    echo "<div class='resimiki'>";
                    echo "<a href='$seo.html'><img src='".$kayit['manset']."'>"."</img>"."</a>";
                    echo "<br><br>";
                    echo "<p class='otel'>"."-&nbsp;";
                    echo "<a href='$seo.html'>".$kayit['oteladi']."</a>";
                    echo "<br>";
                $cek = $kayit['hizmet'];
                $asd = mysql_query("SELECT * FROM hizmet WHERE id='$cek'");
                while ($azdir = mysql_fetch_array($asd)) {
                    echo $azdir['hizmetadi'];  }
                    echo "</div>"."</div>";    }
    Gördüğünüz gibi hizmet kısmı ayrı bir tablo. Otel ekleme sayfasında hizmet alanını doldururken hizmet tablosundan ID çekerek girdiriyorum. Yani Herşey Dahil seçtiğimizde oteller tablosunda hizmet kısmına 1 yazacak mesela.

    Hizmet adını şu şekilde ekliyorum;

    function hizmet () {
            $sor = mysql_query("SELECT * FROM hizmet");
            while ($kayit = mysql_fetch_array($sor)) {
            $id = $kayit['id'];
            $kadi = $kayit['hizmetadi'];    
            echo '<option value="'.$id.'">'.$kadi.'</option>'; }}
    Sonra bunu sayfada yazdırırken yukarıdaki gibi hizmet tablosuna bağlanıp rahatça çekebiliyorum. INNER JOIN karışık geldi bana ama illa ki kullanmamız gerekirse öğreniriz herhalde

    Anlatım için teşekkürler.
  • 16-08-2009, 01:07:56
    #7
    Bu arada ben kendi sorunumu buldum, harf hatası imiş. Yani yöntemde bir sorun yok. Teşekkür ederim.
  • 16-08-2009, 01:32:00
    #8
    mysql_query("SELECT * FROM yazilar,kategoriler WHERE yazilar.catid='1' AND kategoriler.catid=yazilar.catid ORDER by ID DESC LIMIT 0,10");
    Inner Join, buna benzer bir şey mi? Bu saatte kafam biraz karıştı. 2 kere okudum ama yanlış okumuş olabilim
  • 16-08-2009, 11:21:46
    #9
    Genelde ekranda MySQL sorgu satırlarım düzgün görünsün ve ekrana sığsın diye alt alta satırlara bölüyorum, aşağıda sizin yazdığınız sorguyu da değiştirmeden satırlara böldüm.
    ChaoticThundeR adlı üyeden alıntı: mesajı görüntüle
    mysql_query("SELECT * FROM yazilar,kategoriler"
    . "\n WHERE yazilar.catid='1'" 
    . "\n AND kategoriler.catid=yazilar.catid"
    . "\n ORDER by ID DESC LIMIT 0,10");
    Inner Join, buna benzer bir şey mi? Bu saatte kafam biraz karıştı. 2 kere okudum ama yanlış okumuş olabilim
    Şimdi yazılar.catid tamam da, kategoriler.catid nerden çıktı?
    Kategoriler tablosunda catid adlı bir şeye ne gerek var ? Olmaz da.
    Bir de siz zaten yazilar.catid='1' diye yazarak tek bir kategoriden veri çekeceğinizi belirtmişsiniz, bu durumda INNER JOIN gereğini daha hissetmiyorsunuz.
    INNER JOIN ne zaman lazım olur?
    Bir kitap satış sitesinde, bir bilgisayar malzemeleri satış sitesinde, bir araba veya araç satış sitesinde %100 lazım olur.
    Çünkü bilgisayarlar tablosundan en son eklenen 100 bilgisayarı siz ekrana yazdırdığınız zaman, her bilgisayarın markasının da yazdırılması lazım, diğer özellikleri de. Bir bilgisayarın tüm ayrıntılarını bilgisayar tablosunda kaydedemeyeceğimize göre farklı farklı tablolarımız vardır.
    Bilgisayarlar
    Markalar
    Masaustu
    Laptop
    Kampanyadakiler
    falan filan diye pek çok tablomuz vardır. Bunların hepsinin ID'lerini ilişkilendireceğiz ki Bilgisayarlar tablosunun 1 nolu ID'si çağrılınca ona denk gelen marka ID'sinden hemen Marka adı da gelsin, diğer bilgiler de gelsin.
    Mesele bu...