我想从数据库中的两个表中按名称1或名称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中选择匹配搜索字符串的匹配名称1或名称2(如果存在),就好像两个表都已合并一样。
问题在于,当多个表中存在不同的索引时,我遇到了按组合分数排序的选择效率问题。
这个问题并不仅仅是关于如何构造SELECT。它是关于如何以有效使用索引的方式构造SELECT。 (表非常大)
答案 0 :(得分: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“只有一些名称具有与之关联的辅助名称。”
我将两个基于n2_id的表与n2中的id字段组合在一起。
我使用mysql LIKE进行字符串比较。
以下是SQLFIDDLE