Query Mysql
30/03/2016
0
Minha query:
porem ele retorna tudo, queria separar para mostrar somente ex. pago nas datas entre 12 15.
Fabiano
Posts
30/03/2016
Fabiano
$b2 = $_REQUEST['busca2'];
$b3 = $_REQUEST['busca3'];
$sql = mysql_query("SELECT * FROM coh_bradesco WHERE status LIKE '%$b%' OR data_criacao BETWEEN '%$b2%' AND '%$b3%' UNION SELECT * FROM coh_itau WHERE status LIKE '%$b%' OR data_criacao BETWEEN '%$b2%' AND '%$b3%' UNION SELECT * FROM coh_santander WHERE status LIKE '%$b%' OR data_criacao BETWEEN '%$b2%' AND '%$b3%' UNION SELECT * FROM coh_pagseguro WHERE status LIKE '%$b%' OR data_criacao BETWEEN '%$b2%' AND '%$b3%' UNION SELECT * FROM coh_caixa WHERE status LIKE '%$b%' OR data_criacao BETWEEN '%$b2%' AND '%$b3%' ") or die(mysql_error());
Código mais completo da consulta que preciso.
Agradeço a ajuda.
31/03/2016
Marcos P
Use a tag <Inserir Código> para colocar o código no post. <Inserir Citação> não serve para isso, pois não apresenta os recursos de formatação necessários.
Entendi que seu código é...
SELECT * FROM coh_bradesco WHERE status LIKE '%$b%' OR data_criacao BETWEEN '%$b2%' AND '%$b3%' UNION SELECT * FROM coh_itau WHERE status LIKE '%$b%' OR data_criacao BETWEEN '%$b2%' AND '%$b3%' UNION SELECT * FROM coh_santander WHERE status LIKE '%$b%' OR data_criacao BETWEEN '%$b2%' AND '%$b3%' UNION SELECT * FROM coh_pagseguro WHERE status LIKE '%$b%' OR data_criacao BETWEEN '%$b2%' AND '%$b3%' UNION SELECT * FROM coh_caixa WHERE status LIKE '%$b%' OR data_criacao BETWEEN '%$b2%' AND '%$b3%'
Existe, nesse código, um problema no uso dos operadores lógicos, pois a precedência de OR e AND parece estar errada.
Tente assim e veja se fica mais perto do que você precisa...
SELECT * FROM coh_bradesco WHERE status LIKE '%$b%' OR (data_criacao BETWEEN '%$b2%' AND '%$b3%') UNION SELECT * FROM coh_itau WHERE status LIKE '%$b%' OR (data_criacao BETWEEN '%$b2%' AND '%$b3%') UNION SELECT * FROM coh_santander WHERE status LIKE '%$b%' OR (data_criacao BETWEEN '%$b2%' AND '%$b3%') UNION SELECT * FROM coh_pagseguro WHERE status LIKE '%$b%' OR (data_criacao BETWEEN '%$b2%' AND '%$b3%') UNION SELECT * FROM coh_caixa WHERE status LIKE '%$b%' OR (data_criacao BETWEEN '%$b2%' AND '%$b3%')
31/03/2016
Fabiano
Muito obrigado pela dica, vou fazer certo desta vez.
Fiz como você sugeriu porem retornou esta msg de erro.
Warning: mysql_num_rows() expects parameter 1 to be resource, string given in
Estava pensando se fazer com INNER JOIN não seria o mais correto, mas ainda estou engatinhando em banco de Dados, e como gosto muito estou na luta para aprender aos poucos. Estou escrevendo o seguinte código com ajuda de alguns artigos:
$sql = mysql_query("SELECT b.data_criacao, b.cliente, b.valor, b.status, b.banco FROM coh_bradesco b INNER JOIN coh_caixa b USING (id) WHERE b.data_criacao LIKE '%$b%'");
estou com duvidas de como esticar este comando para todas as tabelas.
31/03/2016
Fabiano
$sql = mysql_query("SELECT b.data_criacao, b.cliente, b.valor, b.status, b.banco FROM coh_bradesco b INNER JOIN coh_caixa b USING (id) WHERE b.status LIKE '%$b%' AND b.data_criacao LIKE '%$b2%' AND b.data_criacao LIKE '%$b3%' ");
Retornou esta msg de erro:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean
31/03/2016
Marcos P
No seu caso, você faz < select * >. Todas as tabelas tem a mesma estrutura ?
Tente testar o código que coloquei com apenas as colunas comuns.
Por exemplo :
SELECT data_criacao FROM coh_bradesco WHERE status LIKE '%$b%' OR (data_criacao BETWEEN '%$b2%' AND '%$b3%') UNION SELECT data_criacao FROM coh_itau WHERE status LIKE '%$b%' OR (data_criacao BETWEEN '%$b2%' AND '%$b3%') UNION SELECT data_criacao FROM coh_santander WHERE status LIKE '%$b%' OR (data_criacao BETWEEN '%$b2%' AND '%$b3%') UNION SELECT data_criacao FROM coh_pagseguro WHERE status LIKE '%$b%' OR (data_criacao BETWEEN '%$b2%' AND '%$b3%') UNION SELECT data_criacao FROM coh_caixa WHERE status LIKE '%$b%' OR (data_criacao BETWEEN '%$b2%' AND '%$b3%')
Quanto a questão do INNER JOIN, não entendi se é exatamente o que você precisa, pois o INNER vai recuperar os registros em tabelas diferentes, que tenham em comum uma chave de ligação entre elas. Quais as colunas que "ligam" essas tabelas ?
31/03/2016
Fabiano
Vou explicar resumidamente minha intenção,
Eu quero fazer um mecanismo de busca para listar por status(Pago,Pendente,Quitar Boleto) E data inicial E data final na mesma busca, na primeira mensagem deste topico, ele estava funcionando porem quando eu solicitava uma busca por pagos com data de 2016-03-21 A 2016-03-30 ele me retornava todos os registros, fiz a alteração sugerida porem retornou o erro postado, e na verdade a consulta que preciso não estão na mesma tabela, existem 5 tabelas coh_bradesco, coh_caixa, coh_itau, coh_santander, coh_pagseguro, todos os campos são iguais para todas tabelas, porem no modelo que você me sugere realmente é uma mistura de tipo de campo, são eles, 1 do tipo varchar 2 do tipo date.
da forma que vc me passou funcionou agora, tinha cometido um erro de nao informar o mysql_query anteriormente. porem eu preciso de mais campos para este select como ficaria.
$sql = mysql_query(" SELECT data_criacao FROM coh_bradesco WHERE status LIKE '%$b%' OR (data_criacao BETWEEN '%$b2%' AND '%$b3%') UNION SELECT data_criacao FROM coh_itau WHERE status LIKE '%$b%' OR (data_criacao BETWEEN '%$b2%' AND '%$b3%') UNION SELECT data_criacao FROM coh_santander WHERE status LIKE '%$b%' OR (data_criacao BETWEEN '%$b2%' AND '%$b3%') UNION SELECT data_criacao FROM coh_pagseguro WHERE status LIKE '%$b%' OR (data_criacao BETWEEN '%$b2%' AND '%$b3%') UNION SELECT data_criacao FROM coh_caixa WHERE status LIKE '%$b%' OR (data_criacao BETWEEN '%$b2%' AND '%$b3%') ");
31/03/2016
Fabiano
31/03/2016
Fabiano
31/03/2016
Marcos P
O ideal, contudo, é criar uma estrutura de chaves primárias e estrangeiras que, baseada em queries com INNER JOIN e índices específicos no BD, vão lhe dar a melhor performance possível.
04/04/2016
Fabiano
$b = $_REQUEST['busca']; $b2 = $_REQUEST['busca2']; $b3 = $_REQUEST['busca3']; $sql = mysql_query(" SELECT * FROM coh_bradesco WHERE status LIKE '%$b%' OR(data_criacao BETWEEN '%$b2%' AND '%$b3%') UNION SELECT * FROM coh_itau WHERE status LIKE '%$b%' OR(data_criacao BETWEEN '%$b2%' AND '%$b3%') UNION SELECT * FROM coh_santander WHERE status LIKE '%$b%' OR(data_criacao BETWEEN '%$b2%' AND '%$b3%') UNION SELECT * FROM coh_pagseguro WHERE status LIKE '%$b%' OR(data_criacao BETWEEN '%$b2%' AND '%$b3%') UNION SELECT * FROM coh_caixa WHERE status LIKE '%$b%' OR(data_criacao BETWEEN '%$b2%' AND '%$b3%') ");
Eu gostaria de fazer com que o a query fosse executando mostrando o status pedido + data inicial até data final, desta forma está retornando um ou outro. Preciso retornar somente um tipo de status, teria como?
05/04/2016
Marcos P
WHERE status LIKE '%$b%' AND (data_criacao BETWEEN '%$b2%' AND '%$b3%')
05/04/2016
Fabiano
$b = $_REQUEST['busca']; = Pagos $b2 = $_REQUEST['busca2']; = 2016-03-01 $b3 = $_REQUEST['busca3']; = 2016-03-10 $sql = mysql_query(" SELECT * FROM coh_bradesco WHERE status LIKE '%$b%' AND (data_criacao BETWEEN '%$b2%' AND '%$b3%')
Desta forma por exemplo ele nao está retornando nada, porem existe valores para serem retornados, com o OR ele retorna tudo, mesmo estipulando as datas que preciso.
05/04/2016
Marcos P
Trabalhe com as partes isoladas do WHERE para identificar se a OUTRA PARTE do where pode ser recuperada pelo SELECT completo...
WHERE status LIKE '%$b%' ( as datas retornadas nesses status, atendem a condição do teste completo ? )
e
WHERE status (data_criacao BETWEEN '%$b2%' AND '%$b3%') ( os status retornados nessas datas , atendem a condição do teste completo ? )
05/04/2016
Fabiano
$sql = mysql_query("SELECT * FROM `coh_bradesco` WHERE (`status` = '$b') AND ((`data_criacao` BETWEEN '$b2' AND '$b3')) ORDER BY `data_criacao` DESC");
Desta forma por exemplo?
Clique aqui para fazer login e interagir na Comunidade :)