0

我想知道如何创建一个 PHP 搜索表单来在三个表中执行搜索功能:电话、制造商和操作系统。用户将搜索价格,即键入“350”将搜索手机表中的“价格”字段并显示价值 350 的所有项目,或者搜索“Android”将搜索操作系统表并显示所有运行 Android 的手机。

但是,操作系统表有一个称为 OSID 的主键,而电话表有一个引用 OSID 的外键。当电话表包含 ID 而不是操作系统的名称时,我将如何让它基于对 Android 的搜索来提取结果?

4

3 回答 3

0

那么创建第四个表来索引所有其他表的内容呢?

您可以将此表设置为具有主键(自动递增)、第二个字段(0,表 1;1,表 2;2,表 3)和第三个字段,其外键引用指定的表。然后最后一个字段将包含一个单词。

可以将搜索查询拆分为单词并针对该第四个表进行查询。

然后 SELECT 和 JOIN 在 3 个原始表中寻找它们的匹配项......

然后在前端,您可以添加一些 css 类以允许用户快速过滤(jquery)并仅保留某种类型的结果,以便您(实际上是她)删除误报,同时仍允许用户更改她头脑。

祝你好运,

于 2013-02-05T23:14:28.293 回答
0

希望我理解得很好...

您有一个表:phone,它具有来自表的引用的 ID operating_system,并且与 相同manufacturer,因此,例如,我在操作系统的表条目中像

操作系统

  1. 三星
  2. 诺基亚
  3. IPhone

和制造商

  1. 苹果电脑
  2. 诺基亚

所以,在我的桌面电话里,我有类似的东西

ID/名称/操作系统/制造商/价格

1/三星galaxy/android/三星/300usd

所以,如果你想显示搜索 350 美元以下手机的所有详细信息,你需要做这样的事情

select * from operating_system, manufacturer, phones
where phones.operating_system = operating_system.id
and manufacturer.id = phone.manufacturer
and phone.price < 350

然后显示结果..

于 2013-02-05T23:05:28.080 回答
-1

对于不同的数据,您可以有不同的表单输入。这样,您将知道将哪些数据插入 SQL 查询的哪个部分。

不过,重新发明轮子并不是 2013 年开发人员通常推荐的活动。你可以使用已经存在的东西,比如Sphider。我敢肯定,有很多替代方案,但这是一个开始......

不过有几点建议:

  • 永远不要相信用户。这包括他在搜索框中输入的内容。总是逃避它,以保护自己免受 SQL 注入。
  • 如果您打算使用 Javascript 进行客户端验证,那么也可以在服务器端进行。任何人都可以在他们的浏览器中禁用他们的 Javascript...
于 2013-02-05T22:54:43.883 回答