netbozum
wmaraci reklam

Php Nasıl Yapacağım?

13 Mesajlar 2.342 Okunma
Toplam 13 mesaj ve 2.342 görüntüleme
acebozum
KaplanBozum

YazilimMimari YazilimMimari Eski adi: Turgay Can Kullanıcı
  • Üyelik 25.06.2012
  • Yaş/Cinsiyet 39 / E
  • Meslek Engineering Director
  • Konum İstanbul Avrupa
  • Ad Soyad T** C**
  • Mesajlar 771
  • Beğeniler 2 / 260
  • Ticaret 0, (%0)

brkrtp adlı üyeden alıntı

$kontrol = mysql_query(SELECT * FROM uye WHERE '$id' LIKE ,'$resimid',);

Böyle bir sorgu yazdım. Kullanıcı resmi oylamışsa satırları saydırıp bunu oylayamamasına çalışıyorum. Bu arada 1,2,3,4,5 diye aralarında virgüllü kayıt edildiği için LIKE yerine o şekilde yazdım ama çalışmıyor.


LIKE performanssız çalışır, id gibi kesin olan değerlerde kullanmak makul değildir. Uzak durmanızda fayda var bu tür işlemlerde.


Bu sorgu çalışmaz;

SELECT * FROM uye WHERE 1234 LIKE ,10,;

SQL syntax hatası fırlatır LIKE fonksiyonundan sonra virgül gelemez.

Yapacağınız işlemi düşünüyorum da tablo yapınız nasıl acaba.

Çünkü Kullanıcı ile Resim tabloları arasında many to many ilişki var.

Bu şu demek oluyor.

1 kullanıcı birden çok resim beğenebilir.
1 resim birden çok kullanıcı tarafından beğenilebilir.


Eğer bu tip bir yapınız varsa. resim tablonuz ile user tablosu arasında bir ara tablosu olmak zorundadır.

user_resim gibi ve bu tablo üzerinde user_id, resim_id ve begen gibi üç alan olmalı, begen tinyint(0,1) olmalı ve default değer 0 olmalı. 0 beğenilmedi anlamına gelmektedir, 1 ise beğendi.

user [M - 1] user_resim [1 - M] resim

bu tip database tablo dizaynında sorgunuz şu şekilde olmalı.

select * from user_resim where user_id = 123 and resim_id = 30;

bu sorgu size begen değerini verecektir.

Şimdi iki durum daha var ve bunun içinde iki tablo arasında doğrudan iki ilişki daha tanımlamalısınız.

1. ilişki ;

user [1 - M] resim ; Bir kullanıcının beğendiği tüm resimleri bulmanızda faydalı olacaktır.

select * from resim where user_id = 1213;

2. ilişki ;

user [M - 1] resim ; Bir resmi beğenen tüm kullanıcıları bulmanızda faydalı olacaktır.

select * from user where resim_id = 12;

Üç tablo ve üç ilişki ile user - resim ile ilgili tüm atraksiyonları alabilirsiniz.

Yukarıdaki iki ilişkiyi aslında üzerlerindeki yapı ile de yapabilirsiniz ama fazladan bir sorgu daha yapmanız demek oluyor ve yavaşlık anlamına gelir. Kısacası amacınıza göre sorguları ve ilişkileri kullanmalısınız ;)

Kolay gelsin.

NOT : Bu arada begendi olarak aklımda kalmış hep soru, siz gördü şeklinde düşünebilirsiniz.

kişi bu mesajı beğendi.

https://www.linkedin.com/in/turgaycan/
Kaliteli kod yazılır.. (Günlük/Saatlik ücreti ile)
wmaraci
reklam

brkrtp brkrtp Mobile App Developer Kullanıcı
  • Üyelik 24.08.2013
  • Yaş/Cinsiyet 31 / E
  • Meslek Mobile App Developer
  • Konum İstanbul Anadolu
  • Ad Soyad B** K**
  • Mesajlar 964
  • Beğeniler 269 / 251
  • Ticaret 31, (%97)

Turgay Can adlı üyeden alıntı

LIKE performanssız çalışır, id gibi kesin olan değerlerde kullanmak makul değildir. Uzak durmanızda fayda var bu tür işlemlerde.


Bu sorgu çalışmaz;

SELECT * FROM uye WHERE 1234 LIKE ,10,;

SQL syntax hatası fırlatır LIKE fonksiyonundan sonra virgül gelemez.

Yapacağınız işlemi düşünüyorum da tablo yapınız nasıl acaba.

Çünkü Kullanıcı ile Resim tabloları arasında many to many ilişki var.

Bu şu demek oluyor.

1 kullanıcı birden çok resim beğenebilir.
1 resim birden çok kullanıcı tarafından beğenilebilir.


Eğer bu tip bir yapınız varsa. resim tablonuz ile user tablosu arasında bir ara tablosu olmak zorundadır.

user_resim gibi ve bu tablo üzerinde user_id, resim_id ve begen gibi üç alan olmalı, begen tinyint(0,1) olmalı ve default değer 0 olmalı. 0 beğenilmedi anlamına gelmektedir, 1 ise beğendi.

user [M - 1] user_resim [1 - M] resim

bu tip database tablo dizaynında sorgunuz şu şekilde olmalı.



bu sorgu size begen değerini verecektir.

Şimdi iki durum daha var ve bunun içinde iki tablo arasında doğrudan iki ilişki daha tanımlamalısınız.

1. ilişki ;

user [1 - M] resim ; Bir kullanıcının beğendiği tüm resimleri bulmanızda faydalı olacaktır.



2. ilişki ;

user [M - 1] resim ; Bir resmi beğenen tüm kullanıcıları bulmanızda faydalı olacaktır.



Üç tablo ve üç ilişki ile user - resim ile ilgili tüm atraksiyonları alabilirsiniz.

Yukarıdaki iki ilişkiyi aslında üzerlerindeki yapı ile de yapabilirsiniz ama fazladan bir sorgu daha yapmanız demek oluyor ve yavaşlık anlamına gelir. Kısacası amacınıza göre sorguları ve ilişkileri kullanmalısınız ;)

Kolay gelsin.

NOT : Bu arada begendi olarak aklımda kalmış hep soru, siz gördü şeklinde düşünebilirsiniz.


Elinize sağlık hepsini anladım fakat daha önce tinyint kullanmadım

Değerleri tinyint nasıl kaydetmeliyim aradaki virgül ve sql komutu nasıl olmalı kayıt için?
 

 

MMurt MMurt WM Aracı Kullanıcı
  • Üyelik 24.06.2014
  • Yaş/Cinsiyet 45 / E
  • Meslek Yazılım
  • Konum İstanbul Avrupa
  • Ad Soyad M** M**
  • Mesajlar 25
  • Beğeniler 1 / 5
  • Ticaret 0, (%0)
Aşaıdaki mantık ve mysql sorgusu işinizi görebileceğini düşünüyorum.

tablo1 --> Resim kayıtlarının tutulduğu tablo

id / resim
-------------
1 / resim1.jpg
2 / resim2.jpg
3 / resim3.jpg
4 / resim4.jpg
5 / resim5.jpg

tobla2 -> hangi resmi hangi kullanıcı tarafından görüldüğü bilgisinin tutulduğu tablo


id / kullanıcı_id / resim_id
-------------------------
1 / 15 / 3
2 / 15 / 5

Eğer aynı resmi aynı kullanıcı tarafından ikinci kez görülmesini istemiyorsan;

select * from tablo1 where id NOT IN (select resim_id from tobla2 where kullanici_id=15) sorgusunu kullanabilirsin.

Acıklamak gerekirse;

select resim_id from tobla2 where kullanici_id=15 - > 3,5 sonucunu dönderir.

select * from tablo1 where id NOT IN (3,5) şeklinde düşünebilirsin..

“NOT IN” ise 3. ve 5. Kayıtların haricindeki kayıtlar demektir.

Sonuç olarak ;

select id from tablo1 where id NOT IN (select resim_id from tobla2 where kullanici_id=15) - > 1,2,4 kayıtları döner.

kişi bu mesajı beğendi.

wmaraci
wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al