Php MySQL-如果userid出现在多行中,请从表中选择userid

Php MySQL-如果userid出现在多行中,请从表中选择userid,php,mysql,Php,Mysql,不幸的是,我不太确定如何用这个词来表达,所以它可能在其他地方得到了回答,但我找不到它。不管怎么说,这似乎是个简单的问题。我可以想出很多冗长的方法来实现这一点,但考虑到我对SQL还相当陌生,我并不想知道最有效的方法是什么 下面是我拥有的数据示例:两个连接的表 ------------------------------------------------------- userid attributeid attributename attributetype ---------

不幸的是,我不太确定如何用这个词来表达,所以它可能在其他地方得到了回答,但我找不到它。不管怎么说,这似乎是个简单的问题。我可以想出很多冗长的方法来实现这一点,但考虑到我对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”或“MySQL”)和位置“London”

所以在这个例子中,我将以用户ID 1和3结束

有什么想法吗?如果以前已经解决过此问题,请告诉我其他地方。

这可能会帮助您:

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'))

以下是一个基本查询,可以获得您请求的结果:

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`

您可以使用自联接,一个用于
attributetype
is Skill,另一个用于
attributetype
is Location,然后调整
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'

看起来您有一个带有用户和属性表的标准设置。请尝试以下查询:

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')

从[[Table]]中选择userid,其中attributename位于('Python','MySQL')、attributetype='Skill'和userid位于(从[[Table]]中选择userid,其中attributename='London'和attributetype='Location')
。。。很简单,而且成功了!我实际上有三个表:User、Attributes和一个userAttributes连接表来链接这两个表。上表是以AttributeId为轴心连接在一起的Attributes表和userAttributes表的示例(对不起,我应该更清楚),但是稍微调整一下,我就能够得到一个解决方案-谢谢:)
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')