这是我的数据库结构的一个例子,我想知道创建搜索功能的最佳和最快的方法。
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
如果可能的话,我不想沿着这条路走下去,因为我真的不想用相同的数据更新多个表。
我确信我的脑袋并没有直接考虑这个,我只需要一点指导。
答案 0 :(得分:2)
您需要learn how learn how JOIN
s 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%'