MySQL - 如果表中出现多行,则从表中选择userid

时间:2014-09-13 20:29:01

标签: php mysql

不幸的是我不太确定如何说出来,所以它可能已经在其他地方得到了答案,但我找不到它。无论如何,这似乎是一个简单的问题。我可以想到这样做的冗长方式,但考虑到我对SQL很新,我不知道最有效的方法是什么。

以下是我拥有的数据示例:两个连接表。

-------------------------------------------------------
userid    attributeid    attributename    attributetype
-------------------------------------------------------
1         1              Python           Skill
1         5              C++              Skill
1         2              London           Location
2         1              Python           Skill
2         3              Warsaw           Location
3         4              MySQL            Skill
3         2              London           Location

问题基本上,我想最终得到具有技能的用户的ID('Python'OR'MySQL')和位置'London'。

所以在这个例子中,我最终会得到用户ID 1和3。

有什么想法?如果以前已经解决了这个问题,请把我带到别处。

5 个答案:

答案 0 :(得分:0)

这可能会对您有所帮助:

select userid from tag where attributetype='Skill' AND 
attributename IN ('Python','MySQL') AND userid IN
(select distinct(userid) from tag where 
  (attributetype='Location' AND attributename='London'))

答案 1 :(得分:0)

这是一个基本查询,可以为您提供所需的结果:

SELECT `userid`
FROM `table_name_goes_here`
WHERE (`attributename` IN ('Python', 'MySQL') AND `attributetype` = 'Skill')
AND (`attributename` IN ('London') AND `attributetype` = 'Location')
GROUP BY `userid`

答案 2 :(得分:0)

您可以使用自我加入,一个用于attributetype是技能,另一个用于attributetype是位置,然后调整attributename的条件

select t.*
from t
join t t1 on(t.userid= t1.userid)
where t.attributetype ='Skill'
and t1.attributetype ='Location'
  and t.attributename  in('Python','MySQL')
 and t1.attributename  = 'London'

Demo

答案 3 :(得分:0)

SELECT userId
FROM table
WHERE attributename = 'London'
    AND attributename in ('MySQL', 'Python')

答案 4 :(得分:0)

看起来您的标准设置包含用户属性表。试试这个问题:

SELECT userid
FROM users
WHERE EXISTS
    (SELECT 1
     FROM attributes
     WHERE users.userid = attributes.userid
       AND attributetype = 'Skill'
       AND attributename IN ('Python',
                             'MySQL'))
  AND EXISTS
    (SELECT 1
     FROM attributes
     WHERE users.userid = attributes.userid
       AND attributetype = 'Location'
       AND attributename = 'London')