Hussay 0 Denunciar post Postado Abril 16, 2013 Estou precisando realizar um select simultaneo e não estou conseguindo: //Conexao define('HOSTT','localhost'); define('USERT','root'); define('PASST',''); $dsn = 'mysql:host='.HOSTT; try { $bd = new PDO($dsn,USERT,PASST); $bd->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { echo htmlentities('Houve algum erro com a conexao com o banco de dados: '. $e->getMessage()); } //fim conexao Eu não coloquei o nome do banco de dados, porque estou tentando trabalhar com dois bancos que estão no mesmo servidor com o mesmo usuário e senha. Agora o meu select está sendo realizado assim $query = "SELECT CONCAT(' ',shopping.lojas.fantasia,' ',shopping.lojas.cep,' ',shopping.lojas.bairro,' ',shopping.lojas.cidade,' ',shopping.lojas.estado,' ',shopping.lojas.ruas,' ',shopping.lojas.bairros,' ',shopping.lojas.estados,' ',(SELECT shopping.categorias.nome_cat FROM shopping.categorias WHERE categorias.id = lojas.categoria),' ',shopping.lojas.produtos,' ',shopping.lojas.preco,' ',shopping.lojas.imagens,' ',shopping.lojas.site,' ',shopping.lojas.email,' ',shopping.lojas.twitter,' ',shopping.lojas.facebook,' ',shopping.lojas.comentario,' ',shopping.lojas.imagens_estabelecimentos,' ') as todos_juntos, id_estabelecimentos FROM shopping.lojas HAVING $condicao_busca LIMIT 10"; $query2 = $bd->query($query); O erro ocasionado é o seguinte: Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)' in C:\wamp\www\Shopping2\rpc4.php on line 132 (Essa linha é a com o código $query2 = $bd->query($query) ;) e PDOException: SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s) in C:\wamp\www\Shopping2\rpc4.php on line 132 Vale ressaltar que a parte do código problemática é a (SELECT * FROM cep.enderecos WHERE cep.enderecos.cep='47310-180') que está tentando consultar uma base de dados diferente ("cep"), sendo que os outros elementos estão consultando a base de dados "shopping". Alguém pode me ajudar a resolver esse problema? Compartilhar este post Link para o post Compartilhar em outros sites
mangakah 217 Denunciar post Postado Abril 17, 2013 Vamos por assim para ficar mais fácil entender... SELECT CONCAT( ' ', shopping.lojas.fantasia, ' ', shopping.lojas.cep, ' ', shopping.lojas.bairro, ' ', shopping.lojas.cidade, ' ', shopping.lojas.estado,' ' ,shopping.lojas.ruas, ' ', shopping.lojas.bairros,' ' ,shopping.lojas.estados,' ', ( SELECT shopping.categorias.nome_cat FROM shopping.categorias WHERE categorias.id = lojas.categoria ), ' ', shopping.lojas.produtos, ' ', shopping.lojas.preco, ' ', shopping.lojas.imagens, ' ', shopping.lojas.site, ' ', shopping.lojas.email, ' ', shopping.lojas.twitter, ' ', shopping.lojas.facebook, ' ', shopping.lojas.comentario, ' ', shopping.lojas.imagens_estabelecimentos, ' ' ) AS todos_juntos, id_estabelecimentos FROM shopping.lojas HAVING $condicao_busca LIMIT 10 Nessa consulta SQL que está na variável $query, o que tem em $condicao_busca? Essa parte que você diz que é a problemática não está no código que você colocou acima... Tente trocar o CONCAT pelo CONCAT_WS, além de poupar-lhe de ficar repetindo o whitespace ' ' (você precisa manter só o primeiro), ele ainda elimina os valores nulos (caso o problema esteja nessa subquery dentro do concat). Compartilhar este post Link para o post Compartilhar em outros sites
Hussay 0 Denunciar post Postado Abril 17, 2013 rsrsrsrs, foi sem querer. O código ficou tão grande que me esqueci de colar o certo. Em $condicao_busca é para colocar todos_juntos LIKE '%teste%'. O código é este abaixo: SELECT CONCAT_WS ( ' ', shopping.lojas.fantasia, (SELECT * FROM cep.enderecos WHERE cep.enderecos.cep='47310-180'), shopping.lojas.rua, shopping.lojas.bairro, shopping.lojas.cidade, shopping.lojas.estado, shopping.lojas.ruas, shopping.lojas.rua2, shopping.lojas.bairros, shopping.lojas.estados, (SELECT shopping.categorias.nome_cat FROM shopping.categorias WHERE categorias.id = lojas.categoria), shopping.lojas.produtos, shopping.lojas.produtos, shopping.lojas.preco, shopping.lojas.imagens, shopping.lojas.site, shopping.lojas.email, shopping.lojas.twitter, shopping.lojas.facebook, shopping.lojas.comentario, shopping.lojas.imagens_estabelecimentos )AS todos_juntos, id_estabelecimentos FROM shopping.lojas HAVING todos_juntos LIKE '%teste%' LIMIT 10 Ainda não funcionou Compartilhar este post Link para o post Compartilhar em outros sites
mangakah 217 Denunciar post Postado Abril 17, 2013 Executar esse teste diretamente no mysql dá o mesmo erro? só pra isolar o problema... Outra coisa, se você tirar o HAVING, retorna o que? E uma outra pergunta (essa só por curiosidade): por que você está separando o seus sistema em tantos banco de dados. Para mim tudo ficariam perfeitamente bem em um banco de dados só... por exemplo aí você criou um banco de dados só para CEP, por que isso foi necessário? Compartilhar este post Link para o post Compartilhar em outros sites
Hussay 0 Denunciar post Postado Abril 17, 2013 Executar esse teste diretamente no mysql dá o mesmo erro? só pra isolar o problema... Outra coisa, se você tirar o HAVING, retorna o que? E uma outra pergunta (essa só por curiosidade): por que você está separando o seus sistema em tantos banco de dados. Para mim tudo ficariam perfeitamente bem em um banco de dados só... por exemplo aí você criou um banco de dados só para CEP, por que isso foi necessário? Diretamente no mysql deu o seguinte erro (Eu coloquei um cep válido): #1241 - Operand should contain 1 column(s) Sem o HAVING retorna erro de sintaxe. Esse banco de dados de cep eu uso para várias aplicações distintas e por ser um banco bem grande, eu achei melhor ter ele independente. :) Compartilhar este post Link para o post Compartilhar em outros sites
hufersil 145 Denunciar post Postado Abril 17, 2013 Até onde eu saiba, o MySQL não suporta selecionar vários campos em uma sub-select para agregar na consulta principal. Em outras palavras, o erro tá aqui: (SELECT * FROM cep.enderecos WHERE cep.enderecos.cep='47310-180'), O certo é você fazer uma consulta para cada campo, ou concatenar o que quiser: (SELECT c.logradouro FROM cep.enderecos c WHERE cep.enderecos.cep='47310-180') as logradouro, (SELECT c.bairro FROM cep.enderecos c WHERE cep.enderecos.cep='47310-180') as bairro ... @braços Compartilhar este post Link para o post Compartilhar em outros sites
Hussay 0 Denunciar post Postado Abril 17, 2013 Até onde eu saiba, o MySQL não suporta selecionar vários campos em uma sub-select para agregar na consulta principal. Em outras palavras, o erro tá aqui: (SELECT * FROM cep.enderecos WHERE cep.enderecos.cep='47310-180'), O certo é você fazer uma consulta para cada campo, ou concatenar o que quiser: (SELECT c.logradouro FROM cep.enderecos c WHERE cep.enderecos.cep='47310-180') as logradouro, (SELECT c.bairro FROM cep.enderecos c WHERE cep.enderecos.cep='47310-180') as bairro ... @braços Excelente solução. rsrsrsrs. Tem hora que os detalhes acabam passando despercebidos. Problema resolvido. Muito Obrigado pessoal!!!!!!!!!!!!!!!!!!!!!! Compartilhar este post Link para o post Compartilhar em outros sites