Veritabanına tek id için birden fazla resim kaydetme
17
●3.428
- 27-10-2010, 10:19:40Üyeliği durdurulduaslında şimdi aklıma geldi de. inner join ile yapmak en mantıklısı. tek sorguda hepsini alabiliriz. örnek vermek de isterdim ama daha önce inner join ile birden fazla alan seçmediğim için tereddütteyim.
bilen birisi inner join ile bir örnek yazsa ne güzel olur
- 27-10-2010, 12:17:20Üyeliği durduruldubence bunun icin soyle bir yol izlense daha iyi olur
tablo araba :
id-marka-model-ozellikler-onizleme_resmi
tablo detay_resim
id-araba_id-url
ilana girildiginde ilan.php?id=5 geldi diyelim resimleri gostermek icin
$q = mysql_query("SELECT * FROM detay_resim WHERE araba_id = '".guvenlik($_GET['id'])."'");seklinde sorgulatilabilir. explode ile belirli yerden bolmek benim tarzim degil. bir tablo daha acip iliskili sorgular yapmak bence programala acisindan daha dogru. - 27-10-2010, 12:34:31Üyeliği durdurulduinner join ile sadece tek tek iliski olur hocam onun yerine left ya da right join kullanmak gerek. Bize bire coklu iliski lazım. denemeden yaziyorum
$q = mysql_query("SELECT araba.*,detay_resim.url FROM araba LEFT JOIN detay_resim ON araba.id = datay_resim.araba_id WHERE id='gelen_id'");gibi. - 27-10-2010, 12:53:54Üyeliği durdurulduzaten genis kapsamli bir sey hazirlaniyorsa bu tip salt sql sorgulari yerine cache mekanizmalari kullanmak daha faydali olacaktir. Ayrica mysql üzerinde string tipte bir arama yapmadigimiz icin 2 3 sorgunun pek sakıncası olmayacagini dusunuyorum.
ornek bir cacheleme sistemi :
<?php include('conn.php'); function cachele($q,$t=5) /* $t 5 dk cache*/ { $crc = crc32($q); $u = mysql_query($q); while($r = mysql_fetch_assoc($u)) { $z[] = $r; } if(!is_file('cache_'.$crc.'.php')): touch('cache_'.$crc.'.php'); file_put_contents('cache_'.$crc.'.php',"<?php \n //-- sql : $q \n\r \$data = ".var_export($z,true)." ; \r\n ?>"); return $z; else: $x = floor((time() - filemtime('cache_'.$crc.'.php')) / 60); if($x > $t): file_put_contents('cache_'.$crc.'.php',"<?php \n //-- sql : $q \n\r \$data = ".var_export($z,true)." ; \r\n ?>"); return $z; else: return cagir('cache_'.$crc.'.php'); endif; endif; } function cagir($file) { include($file); echo 'cache\'den aldim abi'; return $data; } print_r(cachele("SELECT * FROM video")); ?>Yukarıda "SELECT * FROM video" sorgusunun crc32'li hashi aliniyor.
eger cache_crc32sorgu.php isimli bir dosya yoksa bu dosya olusturularak icine var_export fonksiyonu yardimi ile yapilan sorgunun degerleri array olarak cikti ediliyor.
bu sorguyu tekrarladigimizda eger olusturulan dosya zamani $t degerinden kucukse bu dosya include edilip dosyada yazili olan $data isimli array return ediliyor .
Sonuc olarak mysql'i ayni sorgulada 5 dklık zamanla bypass etmiş oluyoruz. güzel bir filecache denemenizde fayda var. - 27-10-2010, 13:12:28arabalar tablosu:
ID(ai) BILGI BILGI2 BILGI3
1 asdf qwer zxcv
2 gdfg hdfr tqwc
resimler tablosu:
ID(ai) AID RURL
1 1 images/uploads/sahibinden-temiz-2-el-01.jpg
2 1 images/uploads/sahibinden-temiz-2-el-02.jpg
3 1 images/uploads/sahibinden-temiz-2-el-03.jpg
4 2 images/uploads/honda-civic-01.jpg
yorumlar tablosu:
ID(ai) AID YORUM TARIH
1 1 evet-temizmiş 01-01-0001/01:01
ai: auto increment
AID: araba tablosundaki ID
RURL: resim url
resimleri veya yorumları okuturken ilan sayfasında;
$aid = $_GET["ilanno"]; MYSQL_QUERY ( " SELECT * FROM resimler WHERE aid='$aid' ORDER BY id DESC LIMIT 0,10 " );