Jump to content


Photo

Excluir Resultados De Uma Consulta Com Group By


  • Faça o login para participar
14 replies to this topic

#1 Gustavo de Brito

Gustavo de Brito

    Novato no fórum

  • Usuários
  • 10 posts
  • Sexo:Não informado

Posted 16/12/2010, 19:38

Tudo bom pessoal? Estou há 4 dias quebrando a cabeça nesta consulta que é aparentemente simples mas não consigo executar de jeito nenhum. Já utilizei o sistema de busca, lí metade do livro de PHP e Mysql Básico do Juliano Niederauer além de mais de 10 apostilas na web. Desculpem se a resposta está em algum tópico, mas não achei. Vou ao problema:

Preciso simplesmente executar uma consulta de uma tabela similar a esta, onde preciso listar os "técnicos" que estão "disponíveis" no momento, ou seja, se o mesmo já possui um registro com o status "baixado" MAS está em execução o mesmo não pode aparecer no resultado. Segue exemplo:


tecnico | status |
-----------------------------------------
João | Baixado |
João | Exec |
Jonas | Exec |
Jonas | Baixado |
Jonas | Baixado |
Jonas | Baixado |
Roberto | Baixado |
Marcos | Baixado |
Marcos | Baixado |


Os resultados DEVEM APARECER AGRUPADOS, e os únicos resultados que precisam aparecer é "Roberto" e "Marcos", pois o João e o Jonas estão "em execução", logo não estão "disponíveis". O problema é que quando abrupo os resultados todos os nomes aparecem, independente da condição que coloco no WHERE.

Segue a última versão da consulta que elaborei tentando resolver o problema:

mysql_query ("SELECT tecnico
FROM ordem
WHERE status NOT LIKE (Exec)
GROUP BY tecnico

") or die (mysql_error());

Como dito, o problema é que quando abrupo os resultados todos os nomes aparecem, independente da condição que coloco no WHERE.

Será que alguém pode me ajudar?

#2 Victor Gamarra

Victor Gamarra

    Normal

  • Usuários
  • 95 posts
  • Sexo:Masculino

Posted 16/12/2010, 21:24

Faz um tempo q nao mexo com php e so sei o basic mas vo tentar, tire este group by e coloca assim=
where status=baixado, tenta assim, nao sei se a sintaxe ta correta

#3 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 16/12/2010, 22:26

Tem que ser assim:

SELECT O.tecnico
FROM ordem O
WHERE NOT EXISTS(SELECT 1 FROM ordem O2 WHERE O2.tecnico=O.tecnico AND O2.status='Exec')
GROUP BY O.tecnico

Assim você seleciona os técnicos que não tenham algum registro com status em execução.

#4 Gustavo de Brito

Gustavo de Brito

    Novato no fórum

  • Usuários
  • 10 posts
  • Sexo:Não informado

Posted 17/12/2010, 14:46

Tem que ser assim:

SELECT O.tecnico
FROM ordem O
WHERE NOT EXISTS(SELECT 1 FROM ordem O2 WHERE O2.tecnico=O.tecnico AND O2.status='Exec')
GROUP BY O.tecnico

Assim você seleciona os técnicos que não tenham algum registro com status em execução.


Obrigado amigo. Amanhã logo cedo quando retornar para a empresa vou testar e te retorno. Obrigado pela ajuda.


Tem que ser assim:

SELECT O.tecnico
FROM ordem O
WHERE NOT EXISTS(SELECT 1 FROM ordem O2 WHERE O2.tecnico=O.tecnico AND O2.status='Exec')
GROUP BY O.tecnico

Assim você seleciona os técnicos que não tenham algum registro com status em execução.


Obrigado amigo. Amanhã logo cedo quando retornar para a empresa vou testar e te retorno. Obrigado pela ajuda.


Olá LeoB obrigado pela ajuda e tentativa mas infelizmente não funcionou. A query sempre retorna 0 (zero), em qualquer das hipóteses.

Tive de dar uma adaptada no script pois as tabelas são bem maiores do que no enunciado, e a última versão da query principal, com a sua ajuda, ficou desta maneira:

SELECT O.tecnico
							  FROM ordem O
							  WHERE data_agenda = '$hoje'
							  AND empresa =  '$i'
							  AND tecnico NOT IN (0)
							  AND NOT EXISTS (SELECT 1 FROM ordem O2 WHERE O2.tecnico=O.tecnico AND O2.status NOT IN (2,15))
							  GROUP BY O.tecnico

As únicas linhas que acrescentei foram
WHERE data_agenda = '$hoje'
							  AND empresa =  '$i'
                                                          NOT IN (2,15)

Pois preciso limitar esta pesquisa na data de hoje, para uma determinada empresa, e o status das ordens de serviço não podem ser 2 ou 15.

Estou buscando outras alternativas, e se alguém conseguir ajudar desde já agradeço. Caso eu encontre a solução retorno no fórum para avisar a todos.

#5 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 17/12/2010, 17:08

Mostre a estrutura da tabela.

#6 Gustavo de Brito

Gustavo de Brito

    Novato no fórum

  • Usuários
  • 10 posts
  • Sexo:Não informado

Posted 17/12/2010, 17:54

Mostre a estrutura da tabela.


Olá LeoB, segue as estrutura da tabela:


--
-- Estrutura da tabela `ordem`
--

CREATE TABLE IF NOT EXISTS `ordem` (
  `id` int(255) NOT NULL AUTO_INCREMENT,
  `ordem` text NOT NULL,
  `empresa` text NOT NULL,
  `bal` int(11) NOT NULL,
  `tecnico` int(11) NOT NULL,
  `usuario` int(11) NOT NULL,
  `status` text NOT NULL,
  `tipo` int(11) NOT NULL,
  `periodo` int(11) NOT NULL,
  `hora` text NOT NULL,
  `facilidade` text NOT NULL,
  `cliente` text NOT NULL,
  `endereco` text NOT NULL,
  `data_cadastro` text NOT NULL,
  `data_atualizacao` text NOT NULL,
  `data_baixa` text NOT NULL,
  `data_agenda` varchar(255) NOT NULL,
  `terminal` int(11) NOT NULL,
  `agenda_flex` int(11) NOT NULL,
  `continuada` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=23654 ;


Obrigado.

Detalhe: A consulta abaixo funciona certinho, só que ainda traz os técnicos em execução (no caso, o status=2 significa que o técnico está em execução).

Acredito que este seja o caminho, só não consigo fazer a "sub-consulta" para eliminar do resultado os técnicos que estão em execução. Segue a query:

SELECT O.tecnico
							  FROM ordem O
							  WHERE O.data_agenda = '$hoje'
							  AND O.empresa =  '$i'
							  AND O.tecnico NOT IN (0)
							 
                                                          ***AQUI DEVE ENTRAR ALGUMA SUB-CONSULTA PARA ELIMINAR DOS RESULTADOS DA QUERY O TÉCNICO QUE ESTÁ EM UMA ORDEM COM STATUS "2" (EM EXECUÇÃO)**

							  GROUP BY O.tecnico

Mais uma vez, agradeço a ajuda.

#7 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 17/12/2010, 18:47

Vamos fazer assim então:

SELECT O.tecnico
FROM ordem O
WHERE O.data_agenda = '$hoje'
AND O.empresa = '$i'
AND O.tecnico != 0
AND O.tecnico NOT IN (SELECT O2.tecnico FROM ordem O2 WHERE O2.status='2')
GROUP BY O.tecnico

Agora vai.

A propósito, usar um campo text pra armazenar "2" é um exagero. Não poderia ser tinyint?

#8 Gustavo de Brito

Gustavo de Brito

    Novato no fórum

  • Usuários
  • 10 posts
  • Sexo:Não informado

Posted 18/12/2010, 11:08

Vamos fazer assim então:

SELECT O.tecnico
FROM ordem O
WHERE O.data_agenda = '$hoje'
AND O.empresa = '$i'
AND O.tecnico != 0
AND O.tecnico NOT IN (SELECT O2.tecnico FROM ordem O2 WHERE O2.status='2')
GROUP BY O.tecnico

Agora vai.

A propósito, usar um campo text pra armazenar "2" é um exagero. Não poderia ser tinyint?


Leob,

Genial! Funcionou perfeitamente!

Muito obrigado pela ajuda. Além de resolver meu problema, ainda me ensinou a lógica por trás da query.

Parabéns pela proatividade, conhecimento e vontade de ajudar os colegas em dificuldades.

Um abraço.

Gustavo.

E seguindo sua orientação alterei também o tipo do campo status.

#9 Miguceamma

Miguceamma

    MiguPenjisse

  • Usuários
  • 11724 posts

Posted 18/09/2017, 00:15

Cialis Senza Ricetta Yahoo viagra cialis Cialis Bonifico Bancario
Difference Between Amocillin And Cephalexin Priligy En Ligne Us Viagra For Sale
Propecia After 5 Years <a href=http://cialtobuy.com>cialis</a> Kaufen
Mircette Without Prescription cialis price Online Generic Cialis Review
Cialis En Capital Federal
Zithromax Ten Days <a href=http://cialtobuy.com>cialis online</a> Cialis Ou Commander
Online Bentyl Legally Internet buy cialis Priligy Y Viagra
Priligy Mas Barato
Priligy Similar <a href=http://cialtobuy.com>generic cialis</a> Achat De Lioresal
buy accutane in mexico cialis Pfizer Viagra Kaufen Cytotec Meilleur Prix Sans Ordonnance Levitra Eccezionale cialis price Viagra Samples Canada

#10 Miguceamma

Miguceamma

    MiguPenjisse

  • Usuários
  • 11724 posts

Posted 05/10/2017, 03:43

Viagra Nur Auf Rezept Cialis Prezzo In Italia generic levitra professional 20 mg Cephalexin 750mg Cialis Store
Price Canada Buy Propecia Keflex Joint Swellings Prix Kamagra En Algerie viagra online Doryx Alti
Buy Allopurinol Without A Prescription Cialis Poppers Icd E viagra prescription Pharmists In Canada Cialis

#11 HaroNism

HaroNism

    Super Veterano

  • Usuários
  • 13822 posts
  • Sexo:Masculino
  • Localidade:San Miguel de Tucuman

Posted 05/10/2017, 07:44

Generic Propecia Review viagra prescription Prix Du Cialis 5 Mg 34hour Canadianpharmacy

#12 Miguceamma

Miguceamma

    MiguPenjisse

  • Usuários
  • 11724 posts

Posted 21/10/2017, 02:35

Generic Cheap Dutasteride 0.5mg Baldness C.O.D. Animal Amoxicillin 50mg Bmp 193 Bentyl Without A Prescription viagra Acquistare Kamagra Nantes Viagra Commander France
Discount Real On Line Elocon Tablet Medicine Overseas Mastercard Levitra Da 5 Mg Costo Pfizer Viagra Instructions viagra Cialise 20 Priligy Generico Senza Ricetta Prix Kamagra Marseille
Cheapeast Hydrochlorothiazide Real Secure Pharmacy Without A Script viagra prescription buy generic accutane online no prescription Usa Rx Pharmacy Viagra Generic

#13 Miguceamma

Miguceamma

    MiguPenjisse

  • Usuários
  • 11724 posts

Posted 02/11/2017, 08:24

Propecia Prix Pas Cher Levitra Basf 20mg Viagra Temps D'Action levitra vs viagra vs cialis Discount Sale Secure Progesterone With Free Shipping Jacksonville Comprar Cialis Con Receta Achat Tadalis Sx Sans Risque
Viagra Erfahrungen Mit viagra Viagra Vente Ligne Kamagra Pas Chere Forum Viagra Necesita Receta Medica

#14 Miguceamma

Miguceamma

    MiguPenjisse

  • Usuários
  • 11724 posts

Posted 24/11/2017, 21:19

Buy Plavix Generic Elocon Asmanex No Doctors Consult Mastercard Accepted order on line levitra Cialis 12 Preis
Generic Cialis Online Propecia 90 Pills cheap cialis Canadian Pharmacy Without Prescription Amoxicillin For Cat

#15 RonsisM

RonsisM

    Super Veterano

  • Usuários
  • 15724 posts
  • Sexo:Masculino
  • Localidade:Plovdiv

Posted 27/11/2017, 17:13

Dapoxitina Basso Prezzo Novolog Flexpen Cost Without Insurance Viagra En Zaragoza online pharmacy Amoxicillin Usual Dose
Pfizer Prezzo Kamagra Buy Cialis Overnight Delivery Amoxicillin Sandoz viagra cialis Buy Amoxil
Canadian Health Mall Pharmacy Cialis 20mg Original viagra Viagra Generikum Bestellen




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq