PHP/SQL简单搜索引擎

标签 php mysql

我有 4 个表:公司、城市、类别和子类别。它们的结构如下:

公司:

company_name (varchar) NOT NULL
company_city_id (int) FOREIGN KEY NOT NULL
company_category_id (int) FOREIGN KEY NOT NULL
company_subcategory_id (int) FOREIGN KEY
company_description (varchar)

城市:

city_name (varchar)
city_id (int)

类别:

category_name (varchar)
category_id (varchar)

子类别:

subcategory_name (varchar)
subcategory_id (varchar)

现在,根据此,我想使用一些搜索词在 companies 表中执行搜索。我需要向公司显示搜索词与所选城市中的company_name、category_name、subcategory_name 或 company_description 中的现有值匹配或部分匹配,并根据相关性对结果进行排序。与顶部搜索词匹配更多的公司。例如,我一直在尝试这样做:

$city = 1;
$search_term = "pizza company";

$sql = "SELECT * FROM companies comp, categories cat, subcategories sub WHERE comp.company_city_id = :city AND
comp.company_name OR cat.category_name OR sub.subcategory_name OR comp.company_description LIKE '%:search_term%'";
$query = $conexao->prepare($sql);
$query->execute(array
(
    'city' => $city,
    'search_term' => $search_term
));

但这似乎效果不太好。我有几个重复的结果,如果我颠倒词序,结果就不会出现。似乎当我搜索类别名称时也没有效果。我应该怎样做才能得到我期望的结果?

最佳答案

考虑一下:

$sql = "SELECT * FROM companies comp, categories cat, subcategories sub WHERE 
comp.company_city_id = {$city} AND
comp.company_name LIKE '%{$search_term}%' OR cat.category_name LIKE '%
{$search_term}%' OR sub.subcategory_name LIKE '%{$search_term}%' OR 
comp.company_description LIKE '%{$search_term}%'";

关于PHP/SQL简单搜索引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46961471/

相关文章:

php - PHP读取cookie过期时间的方法

java - 在开始 <html> 标记之前设置 JavaScript 变量

mysql - 如何在拍卖网站中正确设计ItemsTable和Bisd表

mysql - 错误 1064 :You have an error in your SQL syntax

mysql - 计算重复列并更新计数器列

php - 与 sqlsrv azure 一起使用时,php 中的 "session_register"命令失败

php - 解析 XML 时如何获取详细的错误信息,同时保留 DOM?

php - 检查上个月存在的行(比较两个月之间的数据),其中数字 = 特定值

php - UTF-8贯穿始终

即使在 Intellij 上使用 mySql Maven 依赖项后,java.lang.ClassNotFoundException : com. mysql.jdbc.Driver