Consulta Where And
Pessoal preciso fazer uma consulta simples mas não estou obtendo resultado, tenho a seguinte tabela
---------------
| 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
---------------
| 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
Curtidas 1
Melhor post
Flavio Vico
25/04/2019
Bom dia Pessoal obrigado a todos consegui fazer da forma que o Willian Nascimento mostrou
RESOLVIDO
RESOLVIDO
GOSTEI 1
Mais Respostas
Alex William
24/04/2019
Bom dia, jovem.
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:
Espero ter ajudado. :D
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
GOSTEI 0
Flavio Vico
24/04/2019
Bom dia, jovem.
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:
Espero ter ajudado. :D
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
GOSTEI 0
Alex William
24/04/2019
Olá, amigo.
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?
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?
GOSTEI 0
Flavio Vico
24/04/2019
Olá, amigo.
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?
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
GOSTEI 0
Willian Nascimento
24/04/2019
Pessoal preciso fazer uma consulta simples mas não estou obtendo resultado, tenho a seguinte tabela
---------------
| 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
---------------
| 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!
GOSTEI 0
Willian Nascimento
24/04/2019
Pessoal preciso fazer uma consulta simples mas não estou obtendo resultado, tenho a seguinte tabela
---------------
| 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
---------------
| 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;
GOSTEI 0
Flavio Vico
24/04/2019
Olá, amigo.
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?
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
GOSTEI 0
Flavio Vico
24/04/2019
Pessoal preciso fazer uma consulta simples mas não estou obtendo resultado, tenho a seguinte tabela
---------------
| 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
---------------
| 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?
GOSTEI 0
Alex William
24/04/2019
Olá amigo.
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??
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??
GOSTEI 0
Flavio Vico
24/04/2019
Olá amigo.
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??
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
GOSTEI 0
Emerson Nascimento
24/04/2019
Acredito que seja necessário gerar uma lista do conteúdo do campo tid e, a partir dela, obter os registros que você precisa.
Algo assim:
Daí, com o conteúdo em mãos, faça a busca:
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.
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.
GOSTEI 0