在MYSQL中选择相关行但不限制基于WHERE子句的结果

时间:2014-01-09 23:57:17

标签: php mysql

我有2个表(虽然我不确定我真的需要使用articlesDB表)。我目前很难找到必要的SQL逻辑。我可以在PHP中一起破解一些东西,但我觉得正确的SQL语句可以跳过这一步。

继承我拥有的东西;

tagsDB

**theTag**-**articleID**
bear - 1
fish - 1
cow - 1
tiger - 2
cow - 2
panda - 2

articlesDB

articleID
1
2

规则:

  1. 每篇文章最多5个标签。
  2. 每个文章 可以
  3. 出现在每篇文章中
  4. 我知道其中一个标签($ KeyTag),但不是它的文章 出现在
  5. 我需要一个SQL语句,它会返回任何在$ KeyTag上搜索过的文章中出现的所有标记。

    在上面的例子中,如果我搜索“牛”,我会得到;熊,鱼,牛,虎,牛,熊猫。我很好,有重复(这是重点)。

    此外,如果我搜索标签“熊猫”,我会得到;老虎,牛,熊猫。

3 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望选择同一篇文章中出现的所有标签作为特定标签:

select theTag from tagsDB where articleID in 
 (select articleID from tagsDB
  where theTag  = '$KeyTag'
 )

答案 1 :(得分:1)

尝试:

SELECT theTag FROM tagsBD WHERE articleID IN 
  (SELECT articleID FROM tagsDB WHERE theTag = 'cow');

SQL小提琴

http://sqlfiddle.com/#!2/dce294/1

答案 2 :(得分:0)

您也可以使用SELF JOIN来实现您的目标。

SELECT t2.theTag
FROM tagsDB t1 INNER JOIN tagsDB t2 ON t1.theTag = '$KeyTag'
    AND t2.articleID = t1.articleID;

INDEX(theTag, articleID)上的索引至少应为tagsDB