【问题标题】:Searching for items in different tables with PHP使用 PHP 在不同表中搜索项目
【发布时间】:2013-02-05 22:30:26
【问题描述】:

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

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

【问题讨论】:

    标签: php html mysql sql


    【解决方案1】:

    希望我理解得很好……

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

    操作系统

    1. 三星
    2. 诺基亚
    3. 苹果手机

    和制造商

    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
    

    然后显示结果..

    【讨论】:

      【解决方案2】:

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

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

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

      然后在 3 个原始表中选择并加入匹配项...

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

      祝你好运,

      【讨论】:

        【解决方案3】:

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

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

        不过有几点建议:

        • 永远不要信任用户。这包括他在搜索框中输入的内容。始终逃避它,以保护自己免受 SQL 注入。
        • 如果您打算使用 Javascript 进行客户端验证,那么也可以在服务器端进行。任何人都可以在浏览器中禁用 Javascript...

        【讨论】:

        • 我基本上是在尝试找到最简单的方法。
        猜你喜欢
        • 1970-01-01
        • 2013-12-20
        • 2019-03-06
        • 2019-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-03
        • 1970-01-01
        相关资源
        最近更新 更多