Kuvvet "ima VE"

3 Cevap php

Mysql boolean maçında, hiçbir operatörleri mevcut, YA ima edilir ise. İstediğiniz VE, her anahtar kelimelere + eklemek gerekir.

Yani "kelime1 WORD2" sorgulamak "kelime1 VEYA kelime2", "+ + kelime1 kelime2" "kelime1 VE kelime2" eşittir eşittir

Kullanıcıların girmek zorunda istemiyorum + Her anahtar kelimeden önce, benim seçeneklerim nelerdir?

Önerilen seçeneği 1: (Ben bir şey bulamadık) Ben varsayılan ayarlamak için değiştirebilirsiniz my.conf şey var mı

Önerilen seçenek 2: sorguyu ayrıştırmak ve elle her kelime için + ekleyin. Eğer paylaşabilirsiniz Bunun için herhangi bir basit kod?

(- * <> +) Vs benim ayrıştırma kod tatili ile bu sorun kullanıcı "tırnak" veya operatörleri ekler olduğunu.

3 Cevap

Ben sitemde ikinci önerileri ile gitti.

Basit bir liner Eğer kelime ile sadece anlaşma durumunda, her kelimenin önüne + eklemek için, (değil tırnakla)

$q = implode(' ', array_map(create_function('$a', 'return "+".$a;'), preg_split('`\\s+`', $q))))

hatta basit regex aynı şeyi değiştirin:

echo preg_replace('`(\\W|^)\\w`', '\\1+\\2', $q);

Eğer aramak için tek tek kelimeler değil, aynı zamanda alıntı ifadeler değil sadece varsa bu eklenti + gerektiğini tek tek her işlem görmeyen kelime ve her tırnaklar önce

echo preg_replace('`(\\s|^)(\\w|"[^"]+")`', '\\1+\\2', $q);

Burada ne demek emin, ama her kelimenin önüne + eklemek nasıl bir örnektir.

$s = "a string with several words in it";
$words = preg_split('/\s+/',$s,null,PREG_SPLIT_NO_EMPTY);
if (count($words)) {
    $str = '+' . implode(' +',$words);
}

Kaynak düzenleme kısa hiç operatörleri ile boolean modda tam metin eşleştirme davranışını değiştirmenin bir yolu yoktur. Bazı form veya başka bir seçenek 2 (diğerleri göstermek gibi) kullanmanız gerekir. Arama ifadesi kullanıcıdan gelirse sadece, bunu nasıl dikkatli olun.