MYSQL запрос для поиска по всем полям?
Как бы глупо это ни звучит, есть ли способ сделать что-то вроде этого:
select row_id from mytable where * like '%searched_text%';
под * Здесь я подразумеваю "все поля" в таблице, вместо того, чтобы указывать их по одному...
6 ответов
это невозможно с одним запросом.
Если вы:DESCRIBE table_name;
вы получаете имена полей, из которых можно создать запрос.
поиск во всех полях из каждой таблицы базы данных MySQL может быть полезно.
вот решение в сочетании с некоторым PHP для поиска всех полей в конкретные таблица.
include("db_con.php");
//search all fields
$searchphrase = "banan";
$table = "apa303";
$sql_search = "select * from ".$table." where ";
$sql_search_fields = Array();
$sql = "SHOW COLUMNS FROM ".$table;
$rs = mysql_query($sql);
while($r = mysql_fetch_array($rs)){
$colum = $r[0];
$sql_search_fields[] = $colum." like('%".$searchphrase."%')";
}
$sql_search .= implode(" OR ", $sql_search_fields);
$rs2 = mysql_query($sql_search);
$out = mysql_num_rows($rs2)."\n";
echo "Number of search hits in $table " . $out;
Да, это называется Полнотекстовый Поиск.
вы можете использовать встроенный полнотекстовый поиск MySQL или использовать отдельный продукт для индексирования текста, такой как сервера Apache Lucene и (мой личный фаворит).
Я искал что-то подобное для поиска во всех полях таблицы. Хотя в моей таблице меньше данных, поэтому я выбрал ответ "Килиан Линдберг" и сделал функцию PDO, используя его идею. В этой функции мы можем отправить "строку поиска" и "имя таблицы" в параметре, и он вернет строку SQL, которую мы можем использовать дальше в соответствии с нашим требованием. Мысль в больших таблицах может замедлить процесс.
function columnsTable($Search, $Table){
include("PDO_conn_detail.php"); /* your PDO mysql connection file */
$srchSQLstr = "SELECT * FROM $Table WHERE ";
$tableFields = Array();
$colSQL = $conn->prepare("SHOW COLUMNS FROM $Table");
$colSQL->execute();
while ($result_colSQL = $colSQL->fetch(PDO::FETCH_ASSOC)){
$tableFields[] = $result_colSQL[Field]." LIKE ('%".$Search."%')";
}
$srchSQLstr .= implode(" OR ", $tableFields);
return $srchSQLstr;
}
используйте вот так
select row_id from mytable where '%searched_text%' IN ('column1','column2','column3','column4','column5');
Он является полным решением, является модификацией вышеуказанного решения, это сработало для меня, спасибо.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<?php
include('config.php');
$searchphrase = "adsa";
$table = "tenders";
$sql_search = "select * from " . $table . " where ";
$sql_search_fields = Array();
$sql = "SHOW COLUMNS FROM " . $table;
$rs = mysql_query($sql);
while ($r = mysql_fetch_array($rs)) {
$colum = $r[0];
$sql_search_fields[] = $colum . " like('%" . $searchphrase . "%')";
}
$sql_search .= implode(" OR ", $sql_search_fields);
$rs2 = mysql_query($sql_search);
$out = mysql_num_rows($rs2) . "\n";
echo "Number of search hits in $table " . $out."<br />";
while ($results = mysql_fetch_array($rs2)){
print $results[0]."<br />";
}
?>
</body>
</html>