过滤mysql中的行,有可能获得更多值

我是 PHP 和 MySQL 的新手,我遇到了一些问题。

http://img3.mukewang.com/635b7fe6000123b604360108.jpg

例如,在这里我想显示所有可以使用 Wordpress、Joomla 和 Typo3 的人......在这种情况下,它应该只显示 Mustermann 夫人我试过 WHERE name='joomla' OR name='wordpress' OR name='错字3',但它显示了可以与这三个中的任何一个一起工作的人......对不起我的英语不好


编辑


OP 说明:提供示例数据并不难,无论发布图像多么“容易”,这都不重要


 nachname    vorname  email                name        id

 ---------   -------  -------------------  ---------- --- 

 Mustermann  Mrs                           joomla     148 

 Mustermann  Mrs                           wordpress  148 

 Mustermann  Mrs                           typo3      148 

 Mustermann  Muster   mustermann@gmail.de  wordpress  158 

 Mustermann  Muster   mustermann@gmail.de  typo3      158

SELECT t.*

  FROM ( SELECT 'Mustermann' AS nachname,'Mrs' AS vorname,'' AS email,'joomla' AS NAME,'148' AS id

         UNION ALL SELECT 'Mustermann','Mrs','','wordpress','148'

         UNION ALL SELECT 'Mustermann','Mrs','','typo3','148'

         UNION ALL SELECT 'Mustermann','Muster','mustermann@gmail.de','wordpress','158'

         UNION ALL SELECT 'Mustermann','Muster','mustermann@gmail.de','typo3','158'

       ) t


阿波罗的战车
浏览 49回答 2
2回答

白衣非少年

一个典型的解决方案用于group by聚合具有相同 的行nachname,然后使用having子句进行过滤:select nachnamefrom mytablewhere name in ('joomla', 'wordpress', 'typo3')group by id, nachnamehaving count(distinct name) = 3我假设这id是 的唯一标识符nachname,所以我将它添加到group by子句中;如果不是这种情况,请随时将其删除。此查询为您提供适用于列表nachname中所有三个值的 s 。inname通过修改in列表和目标计数,很容易使查询适应更多(或更少) s。如果表中没有重复(nachname, name)的重复项,可以使用count(*)而不是count(distinct ...),这样会更有效率。

繁星点点滴滴

您可以使用下一个查询来解决您的问题:SELECT     nachname, vorname, email,     CONCAT(s1.name,' ', s2.name,' ', s3.name) as skills,    user.id FROM user JOIN userskill ON user.id = userskill.userid -- each of joins filter by demand skillnameJOIN skill s1 ON userskill.skillid=s1.id and s1.name = 'Wordpress'JOIN skill s2 ON userskill.skillid=s1.id and s2.name = 'Joomla'JOIN skill s3 ON userskill.skillid=s1.id and s3.name = 'Typo3';
打开App,查看更多内容
随时随地看视频慕课网APP