0

我正在我的数据库中进行搜索。同时我安装了一个标签系统。并非所有内容都已标记,因此我还需要数据库中的“老式”结果。让我说清楚:

Table A
+----+----------------------------+
| ID | description                |
+----+----------------------------+
|  0 | horse going bad            |
|  1 | Older Years of Resolutions |
|  2 | The pirate                 |
|  3 | The Wish list              |
|  4 | list that's no list        |
+----+----------------------------+

table TAGS
+----+------------+
| ID | tag        |
+----+------------+
|  0 | list       |
|  1 | knockknock |
+----+------------+

table TAGLINKS
+-------+--------+
| TAGID | JOKEID |
+-------+--------+
|   0   |    2   |
|   0   |    3   |
+-------+--------+

当我进行此搜索时:

select * from A where locate('list',description)

我将从表 A 中获取 ID 3 和 4,这很棒。

当我进行此搜索时:

select * from tags
   join taglinks on tagid=tags.id
   join A on A.id=jokeid
where tag='list'

我从表 A 中得到 ID 2 和 3。

我想要返回的是 ID 2、3 和 4。所以两个结果的连接。我试过这个:

select * from tags
   join taglinks on tagid=tags.id
   join A on A.id=jokeid or locate('list',description)

它似乎给了我正确的结果,但它太慢了,它阻塞了服务器(实际上这些表比这里的例子大得多)。我想要一个组合查询的原因是我需要像 ORDER BY 和 LIMIT 这样的函数。因此,我希望从上述两个查询中获得组合结果。

4

1 回答 1

1

正如 Eugen Rieck 和 Raheel Shan 指出的那样,答案是联合:

select A.* from tags
  join taglinks on tagid=tags.id
  join A on A.id=jokeid
where tag="list"
UNION
select * from A where locate("list",description)

给我 ID 2、3 和 4

于 2013-01-09T13:59:35.713 回答