Mam ciąg znaków zawierający słowa kluczowe rozdzielone przecinkami. Na przykładMySQL i PHP: wiele słów kluczowych
$keywords = 'keyword1, keyword2, keyword3';
My schemat Tabela nazwie tbl_address
jest tak (uproszczonych)
id INT(11) PRIMARY KEY, AUTO INCREMENT
address VARCHAR(250) NOT NULL
Załóżmy, trzeba użyć MySQLi
w PHP (nie PDO
).
Oto moje obecne podejście:
$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;
Podejście to działa, ale nieskuteczny w wydajności. Jeśli jest dużo słów kluczowych, będzie dużo zapytań.
Moje pytanie brzmi, czy istnieje lepszy sposób na osiągnięcie tego samego celu? tj. jaki jest najprostszy sposób na zwrócenie wszystkich rekordów z adresem zawierającym KAŻDY ze słów kluczowych?
To może pomóc: http: // stackoverflow.com/a/9736386/1983854 – fedorqui
Łączenie "LIKE" i "IN": http://stackoverflow.com/questions/1865353/combining-like-and-in-for-sql-server – Chris
@Shivian Serio, dlaczego nie " czy używasz mojego jednego liniowca REGEXP? – Jimbo