1

我想从数据库中的两个表中按 name1 或 name2 进行搜索。

重要提示:只有一些名称具有与之关联的辅助名称2。

表 n1 和 n2 如下:

table n1
|---------------*----------------*-----------------|
| id            | name1          | n2_id           |
|---------------*----------------*-----------------|
| 1             | Joseph         | 1               |
| 2             | David          | NULL            |
| 3             | James          | 2               |
|---------------*----------------*-----------------|

table n2
|---------------*----------------|
| id            | name2          |
|---------------*----------------|
| 1             | Joe            |
| 2             | Jim            |
|---------------*----------------|

(我知道我可以在 n1 表中创建一个名称 2 字段,但这只是对需要此结构的更复杂系统的简化。)

我目前从表 n1 中选择如下:

SELECT id, name1, MATCH ( name1 ) AGAINST ( "+joe*") AS score 
FROM n1 
WHERE MATCH ( name1 ) AGAINST ( "+joe*" in boolean mode) 
order by score desc;

这对于一个非常大的表非常有效。

但是,我想根据搜索字符串从 n1 和 n2 中选择 MATCHING name1 或 name2(如果存在),就好像这两个表是合并的一样。

问题是,当多个表中有不同的索引时,我遇到了按组合分数排序的选择效率问题。

这个问题不仅仅是关于如何构造 SELECT。它是关于如何以有效使用索引的方式构造 SELECT。(桌子很大)

4

1 回答 1

0

尝试这个

SELECT 
n1.id, name1, n2_id, n2.id, name2 
FROM n1 LEFT OUTER JOIN n2 ON
n2.id = n2_id 
WHERE name1 LIKE '%j%' OR name2 LIKE '%j%'
ORDER BY name1;

我使用了LEFT OUTER JOIN,因为

“只有一些名称具有与之关联的次要名称2。”

我将两个基于 n2_id 的表与 n2 中的 id 字段组合在一起。

我使用 mysql LIKE进行字符串比较。

这是SQLFIDDLE

于 2013-12-23T12:31:24.447 回答