I am using a HTML form to allow users to find entries in a database table:
The table in my database has a column called keywords that contains multiple values, and so I use a SELECT query to select all rows that have any keywords that match what the user typed into the form. So controller.php contains this query:
$word= $_GET['word'];
$query = SELECT * FROM table WHERE table.keywords LIKE '%{$word}%
This works fine, except if a user types more than one word into the search box. How do I alter this such that, when a user types more then one word into the search box, it will return all rows that have either of the users words in its keywords column.
i.e, user searches "apples oranges", and the query returns all rows that have either "apples" or "oranges" in their keywords field.
解决方案
You can try with -
$words = explode(' ', $word);
$query = "SELECT * FROM table WHERE table.keywords IN (".implode(',', $words).")";
Or -
$query = "SELECT * FROM table WHERE";
$conds = array();
foreach ($words as $val) {
$conds[] = "table.keywords LIKE '%".$val."%'";
}
$query .= implode(' OR ', $conds);
The checks can be added if required.