Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boas pessoal estou ficando de cabelo em pé, preciso extrair os dados da tabela usando a cláusula
classe = 'A', mas quando incluo ela na consulta não retorna nada, quando excluo retorna todos os dados da cláusula etapa_id = '1
Onde estou errando?
SELECT chevy.*, pontos.*, SUM(pts) as soma FROM chevy
INNER JOIN pontos ON chevy.pos = pontos.posicao WHERE classe = 'A' AND etapa_id = '1'
GROUP BY chevy.nome
ORDER BY pos ASC
A tabela esta assim
CREATE TABLE IF NOT EXISTS `chevy` (
`id` int(11) NOT NULL,
`pos` varchar(10) CHARACTER SET utf8mb4 NOT NULL,
`etapa_id` int(11) NOT NULL,
`No` varchar(10) CHARACTER SET utf8mb4 NOT NULL,
`nome` varchar(255) CHARACTER SET utf8mb4 NOT NULL,
`classe` varchar(100) CHARACTER SET utf8mb4 NOT NULL,
`voltas` varchar(20) CHARACTER SET utf8mb4 NOT NULL,
`tempo_total` time NOT NULL,
`diff` varchar(20) CHARACTER SET utf8mb4 NOT NULL,
`espaco` varchar(20) CHARACTER SET utf8mb4 NOT NULL,
`media` varchar(20) CHARACTER SET utf8mb4 NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=67 DEFAULT CHARSET=utf8;Então lokao eu preciso dos nomes que fazem parte da classe A e estavam presente na etapa 1
Não seria
WHERE classe = 'A' AND etapa_id = '1'?
Quando usei
WHERE classe = 'A' OR etapa_id = '1'
Me retorna todos da etapa_id 1, e todas as classes, classe A e classe B, mas preciso somente da classe A
Sim, seria isso, mas se não exibiu nada, é porque todos que estão na etapa 1 são da classe B. Pode confirmar se é isto mesmo?
negativo, já fiz vários testes, incluindo dados da A quanto da B e para etapa 1 e outras também.
tudo funciona basta colocar a cláusula classe = 'A' na consulta que para de mostrar dados.
Fiz um teste ainda pouco que funcionou, criei uma coluna categoria campo tinyint e setei como categorias 1 e 2 e assim funciona, o problema esta mesmo na classe, seria classe uma palavra reservada do mysql?
Vamos fazer uma contagem agrupada:
SELECT classe, etapa_id, COUNT(*) AS quantidade
FROM chevy
GROUP BY classe ASC, etapaa_id ASC
Esta SQL vai agrupar as classes com as etapas existentes, se não existir, não será exibido.
Insisto que não existe etapa 1 para a classe A, se existir, esta SQL vai dizer quantos são na coluna quantidade.
O resultado foi:
classe etapa_id quantidade
A 0 7
A 1 5
A 2 3
B 0 24
B 1 12
A 0 8
B 0 7
Tente tratar números como números (sem aspas):
...
WHERE classe = 'A' AND etapa_id = 1
Consegui lokaodomau vou deixar registrado aqui, pois estou desde ontem a noite perdendo cabelos com essa consulta:
Então, os dados da tabela vem de um arquivo.csv que faço o upload e gravo na tabela,
só que no csv a classe esta com espaços e estes espaços são gravados no banco ficando assim]
classe = ' A ' copiei a classe o banco e colei na consulta e funcionou.
Aprendi mais uma, o espaço no banco tem seu valor :rolleyes:
Agora vou atrás de como eliminar os espaços do csv antes de gravar no banco
Obrigado lokaodomau pela força aí
Muito bom! Use a função TRIM().
Exemplo:
mysql> SELECT TRIM(' bar ');
-> 'bar'
mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');
-> 'barxxx'
mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx');
-> 'bar'
mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');
-> 'barx'
Se quando você filtra os dois campos não retorna nada, é porque não existe nenhuma classe = 'A' com etapa_id = '1'.
Pensa comigo: