0

我实际上还没有任何代码可以提供..但我可以给你我试图操纵的数据。

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

所以我的桌子看起来像:

关键字表: 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 个条目。

我只想返回与另一个相关的术语。在这种情况下,波士顿是“最低”的公分母,因此,我想将其归还。

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

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

谢谢!

4

2 回答 2

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%")
于 2013-01-08T19:16:26.367 回答
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;
于 2013-01-08T19:16:40.000 回答