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

如何在Mysql中进行搜索引擎查询&;PHP?,php,seo,Php,Seo,我想在内联网上做一个搜索引擎。现在我在PHP中使用这个子句 $k = explode(" ",$_GET[key]); $sql = "select entreprise.*, employee.* where entreprise.* or employee.* like '%$k[0]%' or '%$k[1]%'"; 但它似乎不起作用。你知道哪里不对吗 提前谢谢 编辑: 我已经修改了query子句。有了这个代码,我想你可以知道我想做什么 我想查找与Enterprise表所有列中的内容和

我想在内联网上做一个搜索引擎。现在我在PHP中使用这个子句

$k = explode(" ",$_GET[key]);
$sql = "select entreprise.*, employee.* where entreprise.* or employee.* like  '%$k[0]%' or '%$k[1]%'";
但它似乎不起作用。你知道哪里不对吗

提前谢谢

编辑:

我已经修改了query子句。有了这个代码,我想你可以知道我想做什么

我想查找与Enterprise表所有列中的内容和employee表所有列中的内容相匹配的任何内容。

此:

$sql = "select entreprise.*, employee.* where entreprise.* or employee.* like  '%$k[0]%' or '%$k[1]%'";
不是有效的SQL。很难猜出你想做什么,但我还是在尝试:你想找到员工,然后按姓名或雇佣他们的企业搜索他们。是这样吗?或者您想搜索员工和/或企业

编辑

我想找到与Enterprise表的所有列中的内容和employee表的所有列中的内容相匹配的任何内容

好的,首先您应该意识到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%';


(只是一些想法——你必须从那里开始构建!)

这里缺少from子句吗?@Steven,我已经更改了查询,你能看一下并给我推荐一些吗?@Pascal MARTIN,我想从数据库中搜索所有内容,即使数据库中的表之间没有关系。你知道我的意思并帮我解决吗?这(据我所知)并不是那么简单,至少在SQL中是这样:你必须指定要搜索的内容。。。也许另一种解决方案(如全文索引/搜索引擎)更适合您的需要?我在考虑Lucene、Solr、Sphinx……谢谢,所以在你看来,像我的帖子这样的查询是不可能做到的?你可以这样做(但你必须手工列出字段和表格——连接条件也是如此),但如果可能的话,如果我选择的话,我会使用另一种解决方案^^谢谢,最好使用现有的SEs。但整合它们对我来说并不容易(@Roland Bouman,我很抱歉没有解释我的想法。请看我的编辑。谢谢。修改了我的答案。我会继续我的第二个建议-制作单独的表格来实现关键字索引。@Roland,非常感谢,数据库关键字搜索的想法非常好。我没有做过这样的事情。但是它真的很有趣。我能问你一些问题吗如果我在这方面遇到一些问题,请注意?我正在尝试学习和使用它。当然,你可以随时问。我定期检查stackoverflow,所以我会注意到。@Roland,提前谢谢。我想知道你是在使用sphinx+MySQL全文,还是你自己制作。我正在查看sphinx上的文档。你能给我一些指导吗在上面?
select *
from employee
    inner join entreprise on entreprise.id = employee.id_entreprise
where employee.name like '%word%';