Virgülle ayrılmış anahtar kelimeler içeren bir dizim var. Örneğin:MySQL ve PHP: Çoklu Anahtar Kelime Araması
$keywords = 'keyword1, keyword2, keyword3';
tbl_address
adlı My Tablo şema, bu (basitleştirilmiş) gibidir:
id INT(11) PRIMARY KEY, AUTO INCREMENT
address VARCHAR(250) NOT NULL
PHP MySQLi
(değil PDO
) kullanmak zorunda varsayalım.
$result = array();
$keyword_tokens = explode(',', $keywords);
foreach($keyword_tokens as $keyword) {
$keyword = mysqli_real_escape_string(trim($keyword));
$sql = "SELECT * FROM tbl_address WHERE address LIKE'%$keyword%'";
// query and collect the result to $result
// before inserting to $result, check if the id exists in $result.
// if yes, skip.
}
return $result;
Bu yaklaşım çalışır ancak performansında verimsiz:
İşte benim şimdiki yaklaşımdır. Çok fazla anahtar kelime varsa, çok fazla sorgulama yapar.
Sorum şu: Aynı hedefe ulaşmak için daha iyi bir yol var mı? yani, tüm kayıtları anahtar kelimelerin herhangi birini içeren adresle birlikte göndermenin en kolay yolu nedir?
Bu size yardımcı olabilir: http: // stackoverflow.com/a/9736386/1983854 – fedorqui
“LIKE” ve “IN” özelliklerini birleştirin: http://stackoverflow.com/questions/1865353/combining-like-and-in-for-sql-server – Chris
@Shivian Seriously, neden olmasın? REGEXP tek linerimi kullanıyor musunuz? – Jimbo