Soy nuevo en PHP y MySQL y tengo algunos problemas.
Por ejemplo, aquí me quiera mostrar todas las personas, que pueden trabajar con Wordpress, Joomla y Typo3 ... En este caso, debería mostrar únicamente la Sra Mustermann Probé WHERE nombre = 'Joomla' O name = 'wordpress' O name =' TYPO3' , pero muestra las personas, que pueden trabajar con cualquiera de los tres ... lo siento por mi mala Inglés
EDITAR
OP nota: proporcionar datos de ejemplo es no no es difícil, no importa cómo Flippin "fácil" publicar una imagen es
nachname vorname email name id
--------- ------- ------------------- ---------- ---
Mustermann Mrs joomla 148
Mustermann Mrs wordpress 148
Mustermann Mrs typo3 148
Mustermann Muster [email protected] wordpress 158
Mustermann Muster [email protected] 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','[email protected]','wordpress','158'
UNION ALL SELECT 'Mustermann','Muster','[email protected]','typo3','158'
) t
Un típico utiliza la solución group by
a filas agregados que tienen la misma nachname
, y luego a filtro con una having
cláusula:
select nachname
from mytable
where name in ('joomla', 'wordpress', 'typo3')
group by id, nachname
having count(distinct name) = 3
Supuse que id
es un identificador único para nachname
, por lo que añade a la group by
cláusula; no dude en quitarlo si ese no es el caso.
Esta consulta le da la nachname
s que han trabajado para los tres valores de la in
lista.
Es bastante fácil de adaptar la consulta de manejar más (o menos) name
s, mediante la modificación de la in
lista y el número de destino.
Si no hay duplicados (nachname, name)
duplicados en la tabla, se puede utilizar count(*)
en lugar de count(distinct ...)
, que será más eficiente.