Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

diegorosa

Unknown column in 'where clause'' COMO RESOLVER ?

Recommended Posts

Olá pessoal....

 

estou tendo este erro : Unknown column 'f.origem_id' in 'where clause'' in

 

O slq da minha consulta é esse:

SELECT
u.name AS usuario_nm,
g.name AS usuario_grupo, 
f.clientes_id,
f.usuario_id,
f.curso_id,
f.curva,
f.periodo,
f.origem_id AS origem_id,
f.instituicao_id,
f.parceiro_id,
f.cidade_id,
f.estado_id,
f.nome,
f.email,
f.formatura,
f.semestre,
f.telefone1,
f.qtdformandos,
f.last_update,
f.proposta_alphanet,
f.curso_id AS curso_cd,
f.instituicao_id AS instituicao_cd, 
o.descricao AS origem_nm,
o.origem_id AS origem_cd,
c.curso_nm,
i.instituicao_nm,
cidade.cidade_nm,
cidade.cidade_cd,
IF((select count(*) from cidade_representante where cidade_cd = f.cidade_id) > 0, true,false) AS mapeamento,
e.estado_nm,
e.estado_cd,
rg.regiao_nm AS regiao,
p.nome AS parceiro_nm,
a.abordado,
n.proposta,
n.ultimo,
n.motivo,
n.status_id,
n.negociando,
sn.descricao
FROM formandos AS f

LEFT JOIN (
		SELECT formando_id,
		status_id,
		max(proposta) AS proposta, 
		max(last_update) AS ultimo,
		motivo,
		negociando
		FROM negociacao 
		GROUP BY formando_id 
) AS n ON n.formando_id = f.clientes_id

LEFT JOIN curso AS c ON c.curso_cd = f.curso_id 
LEFT JOIN instituicao AS i ON i.instituicao_cd = f.instituicao_id
LEFT JOIN cidade ON cidade.cidade_cd = f.cidade_id
LEFT JOIN estado AS e ON e.estado_cd = f.estado_id
LEFT JOIN regiaogeografica AS rg ON rg.regiao_cd = e.regiao_cd
LEFT JOIN user AS u ON u.id = f.usuario_id
LEFT JOIN groups AS g ON g.id = u.Group_id
LEFT JOIN origem AS o ON o.origem_id = f.origem_id
LEFT JOIN parceiros AS p ON p.id = f.parceiro_id
LEFT JOIN abordagem AS a ON a.formando_id = f.clientes_id
LEFT JOIN statusnegociacoes AS sn ON sn.id = n.status_id
WHERE 1 = 1  AND f.`origem_id` = '1' ORDER BY `clientes_id` DESC  LIMIT 0, 50 

como pode a coluna "f.origem_id" não existir ?

 

creio que seja algum erro de formatação mas já tentei um monte de coisa aqui e não dá certo.....

 

alguem sabe o que pode ser ?

 

se ajudar eu dei um SELECT VERSION() aqui e voltou 5.1.56 que é a versão do mysql no servidor

 

e eu esqueci de mencionar outra coisa:

 

se eu pegar essa mesma consulta e executá-la pelo mysqlwork-bench( eu uso este heheh) ela roda de boa....

 

mas pelo php dá esse erro ai.....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe, execute o comando DESC formandos, no reresultado, procure pela coluna que ocorreu o erro, verifique se esta coluna existe, e a maneira como ela foi escrita.


Com o comando "DESC formandos" você vê a estrutura da tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

alterei o trecho

SELECT
....

f.origem_id AS origem_id
/* alterei para */
f.origem_id AS origem_codigo

...

e mesmo assim continua dando o mesmo erro... ele diz que a coluna origem_codigo é desconhecida.....

na verdade a coluna não existe mesmo ... o que estou fazendo é usar um apelido ("alias") para a coluna....

 

pois na tabela origem tambem tem a coluna origem_id

 

nao estou entendendo o porque deste erro chato

Compartilhar este post


Link para o post
Compartilhar em outros sites

na ultima linha:

 

WHERE 1 = 1 AND f.origem_id = '1' ORDER BY clientes_id DESC LIMIT 0, 50

 

tem aspas a mais na coluna.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o comando DESC formandos me retorna isso

 

clientes_id bigint(20) NO PRI auto_increment usuario_id varchar(255) YES curso_id bigint(20) YES curva varchar(2) NO periodo varchar(2) NO instituicao_id bigint(20) YES origem_id bigint(20) NO MUL parceiro_id bigint(20) YES cidade_id bigint(20) NO MUL estado_id varchar(2) NO MUL nome varchar(255) YES email varchar(255) YES formatura varchar(255) YES semestre varchar(255) YES telefone1 varchar(255) YES qtdformandos varchar(255) YES last_update timestamp YES proposta_alphanet varchar(255) YES

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro diz que não encontra a coluna `origem_id` na tabela `formandos`, ou `f` ("alias"):

 

sim mas acontece que essa coluna existe

na ultima linha:

 

WHERE 1 = 1 AND f.origem_id = '1' ORDER BY clientes_id DESC LIMIT 0, 50

 

tem aspas a mais na coluna.

 

desculpe.. mas nao entendi direito ..... as aspas que estão sobrando é no '1' ?

A.jr,

 

eu tirei as aspas e continuou na mesma....

 

a ultima linha ficou assim:

WHERE 1 = 1 AND f.origem_id = 1 ORDER BY clientes_id DESC LIMIT 0, 50

ai ai

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem a estrutura das tabelas fica um pouco complicado descobrir.

O que você pode fazer, eh criar uma nova consulta e ir colocando os joins um a um para teste.

Compartilhar este post


Link para o post
Compartilhar em outros sites

segue entao a estrutura das duas tabelas:

CREATE TABLE `formandos` (
  `clientes_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `usuario_id` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `curso_id` bigint(20) DEFAULT NULL,
  `curva` varchar(2) COLLATE utf8_bin NOT NULL,
  `periodo` varchar(2) COLLATE utf8_bin NOT NULL,
  `instituicao_id` bigint(20) DEFAULT NULL,
  `origem_id` bigint(20) NOT NULL,
  `parceiro_id` bigint(20) DEFAULT NULL,
  `cidade_id` bigint(20) NOT NULL,
  `estado_id` varchar(2) COLLATE utf8_bin NOT NULL,
  `nome` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `email` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `formatura` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `semestre` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `telefone1` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `qtdformandos` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `last_update` timestamp NULL DEFAULT NULL,
  `proposta_alphanet` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`clientes_id`),
  KEY `fk_clientes_origem_idx` (`origem_id`),
  KEY `fk_clientes_cidade1_idx` (`cidade_id`),
  KEY `fk_clientes_estado1_idx` (`estado_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2393 DEFAULT CHARSET=utf8 COLLATE=utf8_bin

e da tabela origem:

CREATE TABLE `origem` (
  `origem_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `descricao` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `last_update` datetime DEFAULT NULL,
  PRIMARY KEY (`origem_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_bin

pessoal qualquer filtro ou condição que eu tente depois do WHERE me dá o mesmo erro...

 

Unknown column NOME_DA_COLUNA in 'where clause'

 

o que estou observando é que todas as colunas que coloco na condição depois do WHERE são as mesmas

 

previamente declaradas depois do SELECT ..... e ainda... todas essas colunas existem em suas respectivas tabelas e o mais curioso como já disse.... que se eu rodar o mesmo comando pelo workbenck funciona de boa...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou com este mesmo problema, no php não funciona mas no phpMyAdmin funciona legal.

 

Nenhuma solução???


achei o erro!

 

No meu caso aqui eu tinha dois sql's que utilizam o mesmo "where" um me trazia os registros e outro me trazia apenas o valor total. Acontece que no sql que me trazia o valor total eu não utilizei um alias (mov_financeiro f).

 

sql 1

$where = "1=1";
$where .= ($id_tecnico==='0' ? "" : " AND f.id_pessoa='$id_tecnico'");
$where .= " AND id_tipo_mov='-2' AND data_movimento BETWEEN '$data_ini' AND '$data_fim' AND valor_pagto > 0";

$sql = "SELECT p.nm_pessoa, f.no_documento, f.data_movimento, f.valor_movimento  "
     . "FROM mov_financeiro f "
     . "LEFT JOIN pessoas p ON (f.id_pessoa=p.id_pessoa) "   
     . "WHERE $where "
     . "ORDER BY f.data_movimento";

sql 2 (o erro estava neste sql, onde está "mov_financeiro f" estava apenas "mov_financeiro")

$sqltot = "SELECT sum(valor_movimento) as valor_total "
        . "FROM mov_financeiro f "
        . "WHERE $where ";

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.