Ir para conteúdo

POWERED BY:

Arquivado

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

ThunderPHP

[Resolvido] Instrução SQL

Recommended Posts

Galera bom dia....

 

Estou montando uma pesquisa analítica no php, mas estou sofrendo a dois dias, se alguem puder dar uma força

 

Aqui ele captura através de várias checkboxes os clientes que terei que pesquisar...

if ($_POST['user'] <> ""){

$input = $_POST['user'];
$ctrl=false;
foreach($input as $user) {
 if(!$ctrl)
 {
   $sqx="'".$user."'";
   $ctrl=true;
 }
 $sqx .= " OR usuario LIKE '".$user."'";
}
//echo $sqx;
}
else
{
}

 

Aqui ele captura a data e converte para pesquisa...

$slower = $_POST["data_01"];

$exp = explode("/",$slower);

$ndata = $exp[2]."-".$exp[1]."-".$exp[0];

 

Aqui é a consulta em si..

$sqele = "SELECT * FROM alunos WHERE usuario LIKE ".$sqx." AND data LIKE '$ndata";
$alunos=mysql_query($sqele);
$resultado = mysql_num_rows($alunos);

Ele simplesmente não efetua a pesquisa, ele conta todos os cadastros que possui tal usuário, mas não faz o filtro para a data específica da pesquisa.. se alguem puder me ajudar.. agradeço de verdade....

Compartilhar este post


Link para o post
Compartilhar em outros sites

André... obrigado novamente, ontem você deu uma força...

 

No banco de dados o formato de armazenamento é DATE.. aaaa-mm-dd..

 

O print de saída da minha data de pesquisa da $ndata é exemplo: 2011-01-28, ou seja, pra mim tah normal, não sei onde eu posso estar errando...

 

Vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

para passar uma relação de itens para pesquisar você pode usar o in, separando os ítens com vírgila ","

ex:

SELECT * FROM alunos WHERE usuario IN ( usuario1, usuario5, usuario7, usuario8)

 

e usando implode() ao invés de foreach fica mais fácil

ex:

SELECT * FROM alunos WHERE usuario IN (".implode(",",$_POST['user'])." AND data = {$data}

 

em relação a data, verifica qual o formato da data que está saindo aqui

$ndata = $exp[2]."-".$exp[1]."-".$exp[0];

se é o mesmo do banco, está paracendo que não!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Victor,

 

Obrigado pela ajuda, na primeira sugestão, não consegui pesquisar...

 

Agora na segunda, tenho uma pergunta...

 

Eu crio as boxes baseado em um while

while($dados = mysql_fetch_array($result))
{
   echo "<input type='checkbox' name='user[]' value='".$dados['usuario']."'>".$dados['usuario']." <br>";
}

 

quando eu peço simplesmente $_POST['user']. ele me retorna "array"... por isso eu uso o foreach...

 

Como posso utilizar sua segunda sugestão?

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Da para fazer igual o Victor falou,mas no seu código o problema é o like $ndata

 

Exemplo: se você quer resgatar um registro = a data atual você usa AND data = $ndata, se você quer um registro menor que a data atual você usa AND data <= $ndata ?

 

Com relação a sua query, está faltando aspas nos nomes? e também desta forma que você está pesquisando o nome do usuario tem que ser estritamente digitado conforme o registro no banco. Por exemplo tem um usuario André da Silva, se você digitar apenas Andre não vai encontrar nenhum registro.

 

Tente desta forma, assim ele procura pelo nome(digitado corretamente) e também pela data.

// LIKE '%{$sql}'  - começa com o valor
// LIKE '{$sql}%'  - termina com o valor
// LIKE '%{$sql}%' - contenha o valor
$sqele = "SELECT * FROM alunos WHERE usuario LIKE '{$sqx}' AND data = '{$ndata}'";

Compartilhar este post


Link para o post
Compartilhar em outros sites

o implode() se você observar no manual http://www.php.net/manual/pt_BR/function.implode.php, transforma um array em uma string usando um separador entre eles passado como parâmetro

ex:

$array = array('item1', 'item2', 'item3'); //cria o array e atribui valores
print_r($array); //imprime array
$texto =  implode(",", $array);//transformo o array em uma string usando a vírgula como separador
echo $texto; //imprime o texto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Victor,

 

Realmente com o implode fica mais limpo o código, mas, realmente eu naum consigo ver porque ele naum pesquisa...

 

To batendo cabeça aqui, qqr coisa eu posto aqui, se você tiver alguma sugestão, eu agradeço...

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado de verdade pela ajuda de todos...

$xql1 = "SELECT * FROM alunos WHERE usuario LIKE 'JULIANA' AND data_atualiz LIKE '$hoje'";

eu tenho esta cláusula em uma outra página... e funciona normalmente...

 

 

O problema está que preciso pesquisar dois ou mais usuários, exemplo... JULIANA, MARIA, CHIQUINHA.....

 

Por isso tenho as boxes, para o usuario clicar e escolher mais de um usuário...

 

Tentei desses 3 jeitos.... usando foreach e implode....

$sqele = "SELECT * FROM alunos WHERE usuario IN ('$texto') AND data = '%{$ndata}%'";
$sqele = "SELECT * FROM alunos WHERE usuario LIKE '%$sqx%' AND data = '{$ndata}'";
$sqele = "SELECT * FROM alunos WHERE usuario LIKE '%".$sqx."%' AND data = '".$ndata."'";

Nenhum dos tres acima consegue buscar no banco....

 

e este banco tem mais de mil cadastros, em diversas datas...

 

Coisa muito estranha...

 

Estou aberto a sugestões, se puder ajudar, agradeço....

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.