【问题标题】:Best way to search this type of database structure?搜索这种类型的数据库结构的最佳方法?
【发布时间】:2013-11-05 20:33:55
【问题描述】:

这是我的数据库结构示例,我想知道创建搜索功能的最佳和最快的方法。

orders_users 表:

id || order_id || title || first_name || last_name || email || telephone

orders_details 表:

id || transaction_id || date_time || status

目前我执行以下查询:

SELECT * FROM orders_users WHERE last_name = '%QUERY%'

在此之后,我对第一个查询的结果执行 PHP foreach 以从第二个表中查询 date_time 和 status。 (这是我的搜索结果页面所必需的)

SELECT * FROM orders_details WHERE id = '%ORDER_ID FROM FIRST QUERY%'

这对于不常见的名字来说很好,但如果我在大约 80k 行上搜索“smith”,速度会很慢。

我想到的唯一另一种方法是用可搜索的列和结果填充一个单独的表,这只需要一个查询,如下所示:

id || order_id || last_name || date_time || status

如果可能的话,我不想走这条路,因为我真的不想用相同的数据更新多个表。

我确定我的头脑没有直接考虑这个问题,我只是需要一些指导。

【问题讨论】:

  • 这看起来像是 JOIN 的工作
  • @SamHuckaby 我同意。这些表是否应该是关系数据库的一部分?如果是这样,这是否意味着他们共享一个共同的id 列,或者?
  • 您是否考虑过为常用列编制索引?
  • 哇!非常感谢您的快速回复,JOIN 完美!

标签: php mysql database search structure


【解决方案1】:

您始终可以通过以下方式将两个表连接在一起:

SELECT O.id as id, D.id as order_id, last_name, date_time, status 
FROM orders_users as O LEFT JOIN orders_details as D 
ON O.id = D.id
WHERE last_name LIKE '%QUERY%'

在sql中搜索非常快,不用担心spl搜索的速度。 以防万一,如果您只想按姓氏搜索,我建议您在此列中添加索引,它有助于搜索速度,但不利于插入或删除速度。

【讨论】:

    【解决方案2】:

    你需要learn how learn how JOINs work

    SELECT u.order_id, u.last_name, d.date_time, d.status
    FROM orders_users u INNER JOIN orders_details d
      ON u.order_id = d.id
    

    【讨论】:

      【解决方案3】:

      您将使用如下所示的内连接

      SELECT ou.id, 
             ou.order_id, 
             ou.last_name, 
             od.date_time, 
             od.status 
        FROM orders_users ou
       INNER JOIN orders_details od 
          ON od.id = ou.order_id 
       WHERE ou.last_name = '%QUERY%'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-13
        • 2010-11-13
        • 1970-01-01
        • 1970-01-01
        • 2010-10-20
        • 2014-10-02
        • 1970-01-01
        • 2015-11-16
        相关资源
        最近更新 更多