Consulta Where And

24/04/2019

0

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
Flavio Vico

Flavio Vico

Responder

Post mais votado

25/04/2019

Bom dia Pessoal obrigado a todos consegui fazer da forma que o Willian Nascimento mostrou
RESOLVIDO

Flavio Vico

Flavio Vico
Responder

Mais Posts

24/04/2019

Alex William

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:

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
Responder

24/04/2019

Flavio Vico

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:

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
Responder

24/04/2019

Alex William

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?
Responder

24/04/2019

Flavio Vico

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?


Vou montar uma estrutura simplificada aqui para te mostrar Alex
Responder

24/04/2019

Willian Nascimento

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


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!
Responder

24/04/2019

Willian Nascimento

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


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;
Responder

24/04/2019

Flavio Vico

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?


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
Responder

24/04/2019

Flavio Vico

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


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?
Responder

24/04/2019

Alex William

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??
Responder

24/04/2019

Flavio Vico

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??


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
Responder

24/04/2019

Emerson Nascimento

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:
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.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar