繁体   English   中英

如何在Mysql&PHP中进行搜索引擎查询?

[英]How to make search engine query in Mysql&PHP?

我想在Intranet中创建一个搜索引擎。 现在,我在PHP中使用此子句。

$k = explode(" ",$_GET[key]);
$sql = "select entreprise.*, employee.* where entreprise.* or employee.* like  '%$k[0]%' or '%$k[1]%'";

但这似乎行不通。 你知道哪里错了吗?

提前致谢。

编辑:

$sql = "select * from entreprise, site, salarie where entreprise.*, site.*, salarie.* like  '%$k[0]%' or '%$k[1]%'";

我已经修改了查询子句。 使用此代码,我想您可以知道我想做什么。

我想找到与企业表的所有列中的内容和员工表的所有列中的内容匹配的任何内容。

这个:

$sql = "select entreprise.*, employee.* where entreprise.* or employee.* like  '%$k[0]%' or '%$k[1]%'";

是无效的SQL。 很难猜测您想做什么,但无论如何我都在尝试:您想找到员工,并按姓名或雇用他们的企业来搜索他们。 是这样吗 或者您想搜索雇员和/或企业?

编辑

我想找到与企业表的所有列中的内容和员工表的所有列中的内容匹配的任何内容。

好的,首先,您应该认识到SQL可能不是这项工作的最佳工具。 查看其他评论者-他对狮身人面像和朋友的建议很好。 但是,如果您确实想要:

$sql = '
    SELECT e.id, e.name
    FROM   enterprise e
    -- first, look in column1
    WHERE  e.column1 LIKE '."'%".$k[0]."%'".'
    OR     e.column1 LIKE '."'%".$k[1]."%'".'
    ...etc for all entries in k...
    OR     e.column1 LIKE '."'%".$k[N]."%'".' 
    -- then, look in column2
    OR     e.column2 LIKE '."'%".$k[0]."%'".'
    OR     e.column2 LIKE '."'%".$k[1]."%'".'
    ...and so on and so forth for all entries in $k and all columns in enterprise...
    UNION ALL
    SELECT s.id, s.name
    FROM   salarie s
    WHERE  ...and the same for columns of salarie...
    ...
    UNION ALL
    ...any other tables you want to search...
';

如您所见,没有什么能让您开心。

另一种可能给您带来更多乐趣的方法是做一些通宵的工作,以扫描您感兴趣的表中的所有行,将要搜索的文本解析为单独的词,然后将它们存储在关键字表中,并存储源数据库中的对象和关键字在单独的表中。 然后,您可以搜索关键字表,并使用找到的ID和表名来查找关键字集合,以构建实际查询以检索这些行。 这就是我所做的,而且效果很好。 它的效果更好,因为遇到的单词数量相对较少,而对象的集合很有可能非常大。

很难确切地知道您要做什么,但是您需要在SQL查询中指定:

  • 在哪个表上使​​用from子句
  • where子句中,必须在哪些字段上进行搜索。
  • 员工和企业之间的数据如何关联:
    • 您是否要搜索企业及其员工?
    • 对于员工又有企业?
    • 对于所有企业和雇员,当雇员或企业中包含以下单词?


您可以使用类似这样的方法来搜索包含该词的企业,然后将其员工吸引到:

select *
from entreprise
    inner join employee on employee.id_entreprise = entreprise.id
where entreprise.name like '%word%'
    or entreprise.description like '%word%';


或者,要搜索符合条件的员工并获得他们的企业:

select *
from employee
    inner join entreprise on entreprise.id = employee.id_entreprise
where employee.name like '%word%';


(只是一些想法-您必须从那里开始!)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM