1

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

orders_users 表:

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

订单详情表:

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

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

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

4

3 回答 3

2

你需要学习如何学习如何JOIN工作

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
于 2013-11-05T20:43:26.447 回答
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搜索的速度。以防万一,如果您只想按姓氏搜索,我建议您在此列中添加索引,它有助于搜索速度,但不利于插入或删除速度。

于 2013-11-05T20:43:40.477 回答
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%'
于 2015-03-25T19:21:20.223 回答