SQL birden fazla kelimeyi bağımsız aratmak [ÇÖZÜLDÜ]
Merhaba,
$ara = $_GET['ara'];
$parcala = explode("+",$ara);
$sorgu=$db->prepare("SELECT * from tbl_urun_stok WHERE Keywords LIKE :ara");
$sorgu->execute(array(':ara' => '%'.$ara.'%'));
Yukarıdaki sorguda arama alanın ayazdığım 2 veya daha fazla kelimeyi (hangi biri veya hangileri varsa) sonuc gösterecek şekilde nasıl düzenlerim.
Bulduğum bir kod örneğinde GET parametresindeki kelimeleri + ayıracı ile parçalayıp kelime sayısınca LIKE 'ın sonuna or (veya and) ile ekliyor. Ama kendi kodlarıma uyarlayamadım.
Saygılar.
Sözüne ettiğim örnek kodların ekran görünütüsü : https://prnt.sc/rw59w0
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (5)
GET parametresi boşlukları + olarak gönderdiği için input alanımı aşağıdaki gibi düzenleyip senin düzenlediğin kodlar sayesine amacıma ulaştım. Çok teşekkür ederim.
<input type="text" class="form-control" name="ara" onchange="this.value = this.value.replace(/ /g, ',')" placeholder="<?php echo $ara ?>" >`,
$ara = ltrim($ara, ',');
$ara = rtrim($ara, ',');
$parcala = explode(",",$ara);
$sor = "SELECT * from tbl_urun_stok WHERE SatisTipi = 1 and UrunDurum = 1 AND (";
for ($i=0; $i < count($parcala)-1 ; $i++) {
$sor .="Keywords LIKE '%$parcala[$i]%' OR ";
}
$sor .= "Keywords LIKE '%$parcala[$i]%')";
echo $sor;
$sorgu=$db->prepare($sor);
$sorgu->execute();
+
ile olduğunda explode nedense çalışmıyor.+
yerine ,
veya başka bişey kullanın.
$_GET
ile gelen değerin başında veya sonunda ,
olursa sorguyu bozmaması için ltrim
ve rtrim
ile temizleyin.$sorgu->execute();
bu kısımda tekrar $ara
değişkenini kullanmanıza gerek yok.
Kodlar sanki aslında istediğimi vermesi gerekiyor doğru gibi ama sonu aynen yazdığım gibi yani %kelime1 kelime2%
Aşağıya tüm kodlarımı koyuyorum belki gözümden kaçana başka engel bir durum vardır?
<?php
if (isset($_GET['ara'])) {
$ara = $_GET['ara'];
$parcala = explode("+",$ara);
$sor = "SELECT * from tbl_urun_stok WHERE SatisTipi = 1 and UrunDurum = 1 and ";
for ($i=0; $i < count($parcala)-1 ; $i++) {
$sor .="Keywords LIKE '%$parcala[$i]%' or ";
}
$sor .= "Keywords LIKE '%$parcala[$i]%'";
echo $sor;
$sorgu=$db->prepare($sor);
$sorgu->execute(array(':ara' => '%'.$ara.'%'));
} else {
$sorgu=$db->query("SELECT * from tbl_urun_stok WHERE SatisTipi = 1 and UrunDurum = 1");
$sorgu->execute();
}
?>
<?php
if($sorgu->rowCount()){ foreach ($sorgu as $row2) { ?>
Aranan kritere göre ıkan sonuçların listenmesi..
<?php } ?>
<?php } else { ?>
Aradıüınız kriterde ürün bulunamadı!..
<?php } ?>
@makifgokce yanıt için telekkür ederim.
bu hali ile arama satırına kelime1 kelime2 aradıımızı düşünürsek
SELECT * from tbl_urun_stok WHERE Keywords LIKE '%kelime1 kelime2%'
olarak çıktı veriyor.
Ama bana şu tip çıktı verecek şekilde lazım.
SELECT * from tbl_urun_stok WHERE Keywords LIKE '%kelime1%' or Keywords LIKE '%kelime2%'
$parcala = explode("+",$ara);
$sor = "SELECT * from tbl_urun_stok WHERE ";
for ($i=0; $i < count($parcala)-1 ; $i++) {
$sor .="Keywords LIKE '%$parcala[$i]%' or ";
}
$sor .= "Keywords LIKE '%$parcala[$i]%'";
echo $sor;
bu şekilde dene