Consulta Where And
24/04/2019
0
---------------
| ID | TID |
---------------
| 56 | 2 |
---------------
| 58 | 2 |
---------------
| 25 | 8 |
---------------
| 25 | 2 |
---------------
| 12 | 9 |
---------------
| 18 | 2 |
---------------
| 45 | 10 |
---------------
| 35 | 2 |
---------------
| 18 | 8 |
---------------
Minha consulta
SELECT
ID
FROM
table
WHERE TID = 2 and TID = 8
GROUP BY ID
resultado esperado
25 e 18
Flavio Vico
Post mais votado
25/04/2019
RESOLVIDO
Flavio Vico
Mais Posts
24/04/2019
Alex William
Sua consulta retornará qualquer ID da tabela quando o TID for 2 E 8. É possivel TID ter dois valores?
Minha dica, use uma tabela temporaria pra lançar um tipo de ID "TID" e depois selecione os outros usando TID e ID "IN" quando o ID estiver na tabela temporaria. Depois DROPE a tabela temporaria. Desta forma:
CREATE TABLE tmpID AS SELECT ID FROM table WHERE TID = 2; SELECT ID FROM testedevmedia WHERE TID = 8 AND ID IN ( SELECT ID FROM tmpID); DROP TABLE tmpID;
Espero ter ajudado. :D
24/04/2019
Flavio Vico
Sua consulta retornará qualquer ID da tabela quando o TID for 2 E 8. É possivel TID ter dois valores?
Minha dica, use uma tabela temporaria pra lançar um tipo de ID "TID" e depois selecione os outros usando TID e ID "IN" quando o ID estiver na tabela temporaria. Depois DROPE a tabela temporaria. Desta forma:
CREATE TABLE tmpID AS SELECT ID FROM table WHERE TID = 2; SELECT ID FROM testedevmedia WHERE TID = 8 AND ID IN ( SELECT ID FROM tmpID); DROP TABLE tmpID;
Espero ter ajudado. :D
Então Alex
A ideia é exatamente este TID representa id de uma TAG e ID é o id de uma pessoa quando fazer o filtro e e buscar a TAG X e Y em um select multiplo ele trazer pessoas que tem a tag X e Y
24/04/2019
Alex William
Se você usar "OR" no lugar do "AND" ele vai trazer todos que tenham um dos valores.
Se você usar "AND" o SQL vai buscar os registros em que o TID tenha os dois valores ao mesmo tempo, logo não retorna nada porque seu TID é unico por registro.
A forma que encontrei para trazer o que você precisa é da forma que eu mostrei no post anterior.
Teria como me mostrar um caso pratico do que realmente você precisa? Quem sabe eu possa te ajudar em algo. É algum sistema que você precisa executar determinada tarefa?
24/04/2019
Flavio Vico
Se você usar "OR" no lugar do "AND" ele vai trazer todos que tenham um dos valores.
Se você usar "AND" o SQL vai buscar os registros em que o TID tenha os dois valores ao mesmo tempo, logo não retorna nada porque seu TID é unico por registro.
A forma que encontrei para trazer o que você precisa é da forma que eu mostrei no post anterior.
Teria como me mostrar um caso pratico do que realmente você precisa? Quem sabe eu possa te ajudar em algo. É algum sistema que você precisa executar determinada tarefa?
Vou montar uma estrutura simplificada aqui para te mostrar Alex
24/04/2019
Willian Nascimento
---------------
| ID | TID |
---------------
| 56 | 2 |
---------------
| 58 | 2 |
---------------
| 25 | 8 |
---------------
| 25 | 2 |
---------------
| 12 | 9 |
---------------
| 18 | 2 |
---------------
| 45 | 10 |
---------------
| 35 | 2 |
---------------
| 18 | 8 |
---------------
Minha consulta
SELECT
ID
FROM
table
WHERE TID = 2 and TID = 8
GROUP BY ID
resultado esperado
25 e 18
Bom dia pessoal,
Talvez o Flavio esteja procurando esta consulta:
SELECT A.ID FROM tabela A, tabela B WHERE A.ID = B.ID AND A.TID = 2 AND B.TID = 8;
/* Onde a tabela A e B são a mesma, apenas usando um alias */
Um abraço!
24/04/2019
Willian Nascimento
---------------
| ID | TID |
---------------
| 56 | 2 |
---------------
| 58 | 2 |
---------------
| 25 | 8 |
---------------
| 25 | 2 |
---------------
| 12 | 9 |
---------------
| 18 | 2 |
---------------
| 45 | 10 |
---------------
| 35 | 2 |
---------------
| 18 | 8 |
---------------
Minha consulta
SELECT
ID
FROM
table
WHERE TID = 2 and TID = 8
GROUP BY ID
resultado esperado
25 e 18
Bom dia pessoal,
Talvez o Flavio esteja procurando esta consulta:
SELECT A.ID FROM tabela A, tabela B WHERE A.ID = B.ID AND A.TID = 2 AND B.TID = 8;
/* Onde a tabela A e B são a mesma, apenas usando um alias */
Um abraço!
Complementando,
Adicione um 'DISTINCT' para evitar duplicados:
SELECT DISTINCT A.ID FROM TESTE A, TESTE B WHERE A.ID = B.ID AND A.TID = 2 AND B.TID = 8;
24/04/2019
Flavio Vico
Se você usar "OR" no lugar do "AND" ele vai trazer todos que tenham um dos valores.
Se você usar "AND" o SQL vai buscar os registros em que o TID tenha os dois valores ao mesmo tempo, logo não retorna nada porque seu TID é unico por registro.
A forma que encontrei para trazer o que você precisa é da forma que eu mostrei no post anterior.
Teria como me mostrar um caso pratico do que realmente você precisa? Quem sabe eu possa te ajudar em algo. É algum sistema que você precisa executar determinada tarefa?
Estruturas de tabelas
http://prntscr.com/ngavxs
No sistema tenho um filtro que ele pode procurar pessoas que atraves das tags relacionadas a ela
Então eu tenho um combo que pode selecionar uma ou mais Tag
E neste filtro tem que funcionar com operador AND, pois preciso puxar pessoas que tem uma TAG e outra relacionada a elas
24/04/2019
Flavio Vico
---------------
| ID | TID |
---------------
| 56 | 2 |
---------------
| 58 | 2 |
---------------
| 25 | 8 |
---------------
| 25 | 2 |
---------------
| 12 | 9 |
---------------
| 18 | 2 |
---------------
| 45 | 10 |
---------------
| 35 | 2 |
---------------
| 18 | 8 |
---------------
Minha consulta
SELECT
ID
FROM
table
WHERE TID = 2 and TID = 8
GROUP BY ID
resultado esperado
25 e 18
Bom dia pessoal,
Talvez o Flavio esteja procurando esta consulta:
SELECT A.ID FROM tabela A, tabela B WHERE A.ID = B.ID AND A.TID = 2 AND B.TID = 8;
/* Onde a tabela A e B são a mesma, apenas usando um alias */
Um abraço!
Complementando,
Adicione um 'DISTINCT' para evitar duplicados:
SELECT DISTINCT A.ID FROM TESTE A, TESTE B WHERE A.ID = B.ID AND A.TID = 2 AND B.TID = 8;
Willian
Neste caso se eu selecionar mais de 2 tags para filtrar?
24/04/2019
Alex William
Se é um filtro em um sistema, use "OR".
Quando voce marcar o TID 8, ele trara os IDS 25 e 18 e quando voce marcar o 2 ele tambem trara os IDS 35, 56 e 58.
E se voce marcar os TIDs 8, 2 e 9 ele trará os IDS 12, 18, 25, 35, 56 e 58.
E assim por diante. Tecnicamente um filtro funcionaria desta forma.
É assim que voce deseja que o filtro funcione??
24/04/2019
Flavio Vico
Se é um filtro em um sistema, use "OR".
Quando voce marcar o TID 8, ele trara os IDS 25 e 18 e quando voce marcar o 2 ele tambem trara os IDS 35, 56 e 58.
E se voce marcar os TIDs 8, 2 e 9 ele trará os IDS 12, 18, 25, 35, 56 e 58.
E assim por diante. Tecnicamente um filtro funcionaria desta forma.
É assim que voce deseja que o filtro funcione??
Então Alex mas o cliente no filtro esta precisando buscar por todos os clientes que estão relacionado as 2 tags selecionadas simultaneamente por isso o AND
24/04/2019
Emerson Nascimento
Algo assim:
select id, GROUP_CONCAT(tid) AS tids FROM newtable GROUP BY id
Daí, com o conteúdo em mãos, faça a busca:
select * from ( select id, GROUP_CONCAT(tid) AS lista_tid FROM newtable GROUP BY id ) t where (8 in Lista_tid) and (2 in lista_tid)
se não der certo assim, veja como o campo lista_tdi é retornado e faça a busca pertinente:
Nota: não tenho MySQL instalado, então pode ter algum erro de sintaxe na instrução, mas acredito que este seja o caminho.
Clique aqui para fazer login e interagir na Comunidade :)