搜索此类数据库结构的最佳方法是什么?

时间:2013-11-05 20:33:55

标签: php mysql database search structure

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

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

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

我确信我的脑袋并没有直接考虑这个,我只需要一点指导。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

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搜索的速度。 以防万一,如果您只想搜索last_name,我建议您为此列添加索引,它有助于搜索速度,但不会有助于搜索或删除速度。

答案 2 :(得分:0)

您将使用如下所示的内部联接

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%'