мой код это,
$query = "SELECT * FROM `cars` WHERE (color LIKE '%". $key ."%' OR name LIKE '%". $key ."%') AND enabled = 'yes' ORDER BY `ID`";
База данных выглядит следующим образом
ID color name enabled
---- ------ -------- ---------
1 red red car yes
2 blue blue car yes
3 brown brown car yes
т
когда я просматриваю ключ "красный", он возвращает первое поле (ID 1), но если я ищу "красный автомобиль", он ничего не возвращает.
как я могу искать оба поля?
спасибо
EDIT: я фиксированные скобки, но все же я не могу получить результаты с более чем одним словом.
Пробовал это без везения
$query = "SELECT * FROM `cars` WHERE (MATCH (color,name) AGAINST ('$key' IN BOOLEAN MODE)) AND enabled = 'yes' ORDER BY `ID`";
ИЗМЕНИТЬ 2: Питер прав. В запросе нет проблем. странно Я использую это
$key = $_GET['key'];
если $_GET ['key'] больше, чем 1 слово, ключ $возвращает пустую причину.
Я не могу дублировать вашу ошибку. Здесь шаги, которые я предпринял
Новая таблица
CREATE TABLE `cars` (
`ID` int(10) unsigned NOT NULL auto_increment,
`color` varchar(45) NOT NULL,
`name` varchar(45) NOT NULL,
`enabled` varchar(45) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Затем добавлены значения
INSERT INTO `cars` (`ID`, `color`, `name`, `enabled`) VALUES
(1,'red','red car','yes')
, (2,'blue','blue car','yes')
, (3,'brown','brown car','yes');
Затем тестирование запросов
mysql> SELECT * FROM `cars`
-> WHERE (color LIKE '%red%' OR name LIKE '%red%')
-> AND enabled = 'yes'
-> ORDER BY `ID`;
+----+-------+---------+---------+
| ID | color | name | enabled |
+----+-------+---------+---------+
| 1 | red | red car | yes |
+----+-------+---------+---------+
1 row in set (0.00 sec)
mysql> SELECT * FROM `cars`
-> WHERE (color LIKE '%red car%' OR name LIKE '%red car%')
-> AND enabled = 'yes'
-> ORDER BY `ID`;
+----+-------+---------+---------+
| ID | color | name | enabled |
+----+-------+---------+---------+
| 1 | red | red car | yes |
+----+-------+---------+---------+
1 row in set (0.00 sec)
Возможно, посмотрите в другом месте для вашей ошибки
"РЕДАКТИРОВАТЬ 2: Питер прав. problen в запросе. странная вещь, я использую это
$key = $_GET ['key'];
если $_GET ['key'] - более 1 слова, $key возвращает пустую причину."
Как вы проходите в $_GET? Используете ли вы форму или просто вводите свои переменные
blah.php? key = test + и
НЕ
blah.php? key = test и
Вы можете использовать подготовленный оператор для предотвращения SQL-инъекции:
$statement = $db_connection->prepare("SELECT * FROM `cars` WHERE (color LIKE ? OR name LIKE ?) AND enabled = 'yes' ORDER BY `ID`");
$statement->bind_param("s", "%".$key."%");
$statement->execute();
Ваш SQL неверен:
$query = "SELECT * FROM `cars` WHERE (color LIKE '%". $key ."%' OR name LIKE '%". $key ."%') AND enabled = 'yes' ORDER BY `ID`";
Вам нужно поместить цвет и имя в скобки, иначе вы можете найти, что вы вернете строки, если поле включено.