Как сопоставить ключевые слова в предложении с уже существующими предложениями в таблице базы данных?

0

Я хочу, чтобы вставить "Это яблоко, это плод", чтобы запросить базу данных и только совместить слова "яблоко" и "фрукты", а не "фрукты" из базы данных и вернуть "1 фруктовый яблочный красный 10",.

Как изменить код запроса?

Название базы данных "пищевые" поля, как показано ниже:

id name1 name2 name3 name4 type
1 fruit apple red 10 article
2 fruit banana yellow 12 article
3 drink beer yellow 6 article
4 fruits apple yellow 16 books

код:

mysql_connect("localhost", "root", "root") or die(mysql_error());
mysql_select_db("article") or die(mysql_error());
... ...
echo $match . "r"; // $match= This is a apple, it is a fruit
$query = mysql_query("SELECT * FROM food WHERE name1, name2 like '%$match%' ");
$row=mysql_fetch_array($query);
echo $row['id ']. "r" .$row['name1']. "r".$row['name2']. "r".$row['name3']. "r".$row['name4']. "n";
  • 0
    чувак print_r ($ row);
  • 2
    OffTopic: Почему мне жаль следующего человека, который прикоснется к этому коду? OnTopic: Что именно вы пытаетесь сделать? Как вы получаете от "это яблоко, это фрукт" до "1 фрукт яблочный красный 10"? WTF (это действительно все, что я могу сказать)?
Теги:

1 ответ

3

Трудно сказать, но я думаю, что если вы пытаетесь избежать возвращения чего-либо, что не совпадает с точным словом (apples!= apple). Вам придется разбить строку $match на более мелкие части и проверить их отдельно. возможно, используйте explode(), чтобы разбить строку на части, используя пробелы, а затем выполнить точные совпадения применимых слов.

В настоящее время вы проверяете любые данные в базе данных, которые в любом случае могут напоминать строку. Таким образом, он может вернуть "ананас - это плод" только потому, что он имеет слова "есть", "а" и "плод".

Возможно, также стоит переименовать столбцы базы данных. Никто, что вы выглядите кодом с именем1, name2, name3.... как насчет типа, имени, цвета, количества?

$match = trim($match);
$match = strtolower($match);
$newmatch = explode(" ",$newmatch);

Итак, если $match был "Это яблоко", $ newmatch = array ("this", "is", "an", "apple" )

Конечно, это не избавит от каких-либо знаков препинания. Но вы можете сделать это перед рукой, если хотите, с помощью trim и preg_replace.

Help: trim(), strtolower(), explode()

  • 0
    Как сломать $ match? Я не уверен, из каких слов состоит предложение? На этот раз это 8 слов (это яблоко, это фрукт.) Может быть, в следующий раз будет 4 слова (ананас - это фрукт). Или вместо mysql_query есть какой-нибудь путь? Я просто хочу поместить предложение в базу данных, чтобы соответствовать ключевое слово и эхо строки
  • 0
    Вам не нужно знать длину, чтобы разбить его. Если вы хотите быть действительно чистым и аккуратным, я предлагаю использовать trim (), strtolower (), затем explode (). Explode может использоваться для вывода всего, что разделено пробелом, в массив. Затем вы можете перепроверить отдельные разделы в массиве с базой данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню