Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

mysql den id e gore veri çekmek.

merhabalar bir konuda bilginize dayanarak birşey sormak istiyorum.

şimdi bir adet kategori tablomuz var bir adette ürün tablomuz var.

bir ürünün 2 kategoridede gözükmesini istiyorum.

yani urun tablosunda katid değerleri şu şekilde yazdırıyorum

2,3,4,5 gibi urunun gozukmesini istegim kategori idlerini yazdırmış oluyorum urun tablosundaki yerimize.

buraya kadar herşey sağlıklı ve normal.

peki ön yüz tarafında.

kategori.php?id=1 tıkladıgında örneğin

urun.php dosyasında

$katid = intval($_GET['id']);

diye kategori id sini aldıktan sonra.


SELECT * FROM `urun` WHERE `katid` LIKE '%1%'

bu şekilde gosterebiliyorum ama performans bakımından sağlıklı bulmuyorum.

bu işlemi nasıl cozebiliriz.
+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Doğru Cevap

  • protest adlı üyenin fotoğrafı
    11 yıl önce yazılmış
    32 cevap - 6 soru
    hocam
    senin 3. bir tabloya daha ihtiyacın var

    urun tablosunda katid sutunun 1,3,6,7 çok sağlıklı değil.

    3. tablo olarak urunkat tablosu olur
    id, urunid, katid seklinde 3 field olur
    ve kaydederken de 5 nolu urunumuz, 2,5,8,9 kategorilerine ait olsun

    id urunid katid
    -- ------ -----
    1     5      2
    2     5      5
    3     5      8
    4     5      9
    


    tabi sorgu da buna göre olacak.
    kategori.php?id=5 diye çağırdıgında
    once yeni olusturdugumuz tablodan katid 5 olan tum urunleri listeleceksin
    sonra da listeledigin urunlerin id lerinden de urun tablosundan detay okutacaksın..

    ya da direkt
    select * from urun u,urunkat k where k.urunid=u.id and k.katid=5

    şeklinde sorgulatacaksın.
    • sinan adlı üyenin fotoğrafı sinan
      <script type="text/javascript">
      $().ready(function() {
      $('#add').click(function() {
      return !$('#select1 option:selected').remove().appendTo('#select2');
      });
      $('#remove').click(function() {
      return !$('#select2 option:selected').remove().appendTo('#select1');
      });
      });
      </script>




      <label class="formlabels">Kategoriler :</label>
      <select name="katidx" id="select1" multiple="multiple" size="10" style="width: 420px; overflow: scroll;" >

      <?php

      $ylistem = mysql_query("SELECT * FROM kategori WHERE tur='1' ORDER BY id asc");
      $pela = mysql_num_rows($ylistem);
      if ($pela > 0) {
      while ($ylist = mysql_fetch_assoc($ylistem)) {

      $y_id = $ylist["id"];
      $baslik = $ylist["baslik"];

      ?>


      <option value="<?php echo $y_id; ?>"><?php echo $baslik; ?></option>



      <?php
      }
      }
      ?>
      </select>




      <label class="formlabels">Hangi Kategorilerde Gözüksün :</label>
      <select name="katid[]" multiple size="6" id="select2" style="width:420px;">
      <?php


      $kat_bol = explode(",",$katid);

      for ($i=0; $i<count($kat_bol); $i++) {


      $vauvv = $kat_bol[$i];
      $kategoril = mysql_query("SELECT * FROM kategori WHERE id='$vauvv'");
      $kat_ls = mysql_fetch_assoc($kategoril);

      echo '<option value="'.$kat_bol[$i].'" selected>'.$kat_ls[baslik].'</option>';

      }



      ?>

      </select>


      adminden bu şekilde bir işlem yaptırıyorum once kategorileri listeliyorum. sonra aşağıdaki kutuya gösterilecek kategorileri ekliyorum.

      ve

      yazarken db ye

      $katlar = implode(',',$katid);


      katlar sonucunu yazdırıyorum soylediniz gibi 4,5,6 gibi yazıyor

      soylediginiz mantıkta bir tabo daha yaparsak.

      sorgumuzu nasıl yapmalıyız.


      id urunid katid
      1 5 2,5,8 gibi olur nasıl soylediniz şeklinde yazdırız.


      teşekkürler.
      11 yıl önce yazılmış

Cevaplar

  • siyahbeyaz adlı üyenin fotoğrafı
    11 yıl önce yazılmış
    472 cevap - 20 soru
    where katid IN(2,5,8,9) and id='$id'

    aradıgın cevap mysql IN komutunda..
    • sinan adlı üyenin fotoğrafı sinan
      $listem = mysql_query("SELECT * FROM urun where find_in_set(5,katid)"); şeklinde alabiliyorumuşum.

      stackoverflow dan 1 sn de oğrenmiş olduk.
      11 yıl önce yazılmış