mySQL查询 - 在同一查询中再次使用结果

时间:2013-01-08 19:00:14

标签: mysql

我实际上还没有提供任何代码。但我可以提供我想要操作的数据。

我正在使用一组标签/关键字。关键字可以通过'related_id'列与相关联。

所以我的表看起来像:

keyword_tbl: keyword_id | keyword | related_id

对于此示例,让我们假设该表填充了以下条目

Entry 1:
keyword_id : 1
keyword: Marathons
related_id: 0

Entry 2:
keyword_id : 2
keyword: Boston
related_id: 1

如您所见,波士顿的这个条目通过related_id与马拉松相关

我正致力于为用户提供搜索功能。如果他们搜索一个单独的术语,这很容易而不是问题。但是,如果他们搜索“波士顿马拉松”,我现在对查询有困难。

SELECT * FROM keyword WHERE keyword LIKE "%boston%" OR keyword LIKE "%marathon%"

在初步查询之后,我想比较结果,这将是我在上面详述的两个条目。

我想只返回与另一个相关的术语。在这种情况下,波士顿是“最低”的共同点,因此,我想归还它。

想象一下:马拉松 - >波士顿

这可以在一个查询中完成吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为这样的事情可能会成功:

SELECT
  a.*
FROM keyword a
JOIN keyword b
ON (a.related_id = b.keyword_id)
WHERE (a.keyword LIKE "%boston%"
       OR a.keyword LIKE "%marathon%")
AND (b.keyword LIKE "%boston%"
       OR b.keyword LIKE "%marathon%")

答案 1 :(得分:0)

以下查询将为您提供答案 马拉松 - >波士顿。 如果有一个没有关系的关键字,它将显示为 IceCream - >

SELECT resultset1.keyword,'->',IF(resultset2.keyword IS NOT NULL,resultset2.keyword,'')
FROM
    (SELECT * FROM keyword WHERE keyword LIKE "%boston%" OR keyword LIKE "%marathon%")
     as resultset1
LEFT JOIN
    (SELECT * FROM keyword WHERE keyword LIKE "%boston%" OR keyword LIKE "%marathon%")
as resultset2
on resultset1.keyword_id=resultset2.related_id;