Arama butonu
Bu konudaki kullanıcılar: 1 misafir
7
Cevap
851
Tıklama
0
Öne Çıkarma
Mysql like ile and kullanım sorunu
A
7 yıl
Onbaşı
Konu Sahibi

merhaba arkadaşlar php'de bir sorunla karşılaştım ve ne yaptıysam hatayı bulamadım

MYSQL tablolarım
Yazilar
Kategori

kategori idleri "1,2,3"
Yazilarda kategorilerin tutulma şekli "k1,k2,k3"

Mysql kodlarım
 $sql=mysql_query("select * from Yazilar where yayinlandi=0 and projemi=0 and kategori like '%k1%' or 
kategori like '%k89%' or kategori like '%k90%' and zaman<=now() order by zaman
desc LIMIT ". $limit . ", " . $sayfada);


Şimdi bu kodu çalıştırdığımda paylaşımlar doğru kategoride geliyor fakat yayinlandi=0 olsada yayinlandi=1 olsada gösteriyor ben yayinlandi=0 olanları yalnızca göstermek istiyorum lütfen yardımcı olabilirmisiniz. teşekkürler.

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil





< Bu mesaj bu kişi tarafından değiştirildi ahmet1340 -- 12 Ekim 2018; 14:58:2 >

B
7 yıl
Yüzbaşı

Merhaba,

Sorunuz ne tam olarak anlasilmiyor, anlayabildigim kadariyla cevap vermeye calisayim.

oncelikle verdiginiz condition bu

yayinlandi=0 and projemi=0 and kategori like '%k1%' or kategori like '%k89%' or kategori like '%k90%' and zaman<=now()

bu kosullardan herhangi birisi false donerse "and" operatoru yuzunden hepsi false donecek. Sanirim yapmak istediginiz sey boyle olmali

yayinlandi=0 and projemi=0 and ( kategori like '%k1%' or kategori like '%k89%' or kategori like '%k90%') and zaman<=now()

kategori id'leri 1,2,3 ise neden like kullandiniz? id'ler numerik ise like kullanamazsiniz.

yayinlandi=0 and projemi=0 and zaman<=now() and kategori in (1,2,3)

seklinde birden fazla or yerine in operatoru kullanmak daha mantikli


Bu mesaja 1 cevap geldi.
A
7 yıl
Onbaşı
Konu Sahibi

Yazılarda çoklu kategori seçimi yaptırdığım için mecburen like kullanmak zorunda kalıyorum

yzıların tutulduğu sql tablosu
< Resime gitmek için tıklayın >


kategorileri bu şekilde tuttuğum için in kullanamıyorum

parantez olayını denedim ama yine çalışmadı hocam

zaman<=now() komutu sorunsuz çalışıyor ama ne hikmetse yayinlandi=1 olduğunda yinede veriyi gösteriyor


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @bestanealtcizgi
B
7 yıl
Yüzbaşı

quote:

Orijinalden alıntı: ahmet1340

Yazılarda çoklu kategori seçimi yaptırdığım için mecburen like kullanmak zorunda kalıyorum

yzıların tutulduğu sql tablosu
< Resime gitmek için tıklayın >


kategorileri bu şekilde tuttuğum için in kullanamıyorum

parantez olayını denedim ama yine çalışmadı hocam

zaman<=now() komutu sorunsuz çalışıyor ama ne hikmetse yayinlandi=1 olduğunda yinede veriyi gösteriyor
Merhaba,

Birden fazla kategorisi varsa bunun icin 1-n tablo yapmaniz gerekli.

like %k1% diye kosul veriyorsunuz, bu k1 ve k11 icin de gecerli, aradaki farkli nasil ayirdedeceksiniz?


Bu mesaja 1 cevap geldi.
A
7 yıl
Onbaşı
Konu Sahibi

Haklısınız hocam k yı ekleyerek bu sorunun önüne geçtiğimi sanıyordum fakat geçmemişim 1-n tablo derken neyi kastettiniz hocam nasıl yapabilirim örnek verebilirmisiniz


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @bestanealtcizgi
B
7 yıl
Yüzbaşı

quote:

Orijinalden alıntı: ahmet1340

Haklısınız hocam k yı ekleyerek bu sorunun önüne geçtiğimi sanıyordum fakat geçmemişim 1-n tablo derken neyi kastettiniz hocam nasıl yapabilirim örnek verebilirmisiniz
Tekrar merhaba,

Bahsettigim sey veritabani tasariminin temeli. Normalizasyon diye google'dan aratip baslayabilirsiniz.


Bu mesaja 1 cevap geldi.
A
7 yıl
Onbaşı
Konu Sahibi

Tmmdır hocam Çok teşekkürler vakit ayırdığınız


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @bestanealtcizgi
B
7 yıl
Yüzbaşı

quote:

Orijinalden alıntı: ahmet1340

Tmmdır hocam Çok teşekkürler vakit ayırdığınız
Rica ederim, kolay gelsin.



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.