Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá. Estou fazendo uma método para minha classe de gerenciamento de conteúdo, e esse método será responsável por buscar os dados no servidor de banco de dados.
Ela possui três parâmetros: tabela, colunas, filtro, tipo. Tabela é o nome da tabela de onde virão os dados(lógico), colunas são as colunas a serem selecionadas (não me diga), filtro é um array com WHERE, ou qualquer outra coisa e tipo é o tipo de fetch (associativo [1], numérico [2] ou ambos [3]). Exemplo de uma forma de uso:
$manager->fetch("tabela_test", "*", [
"WHERE"=>[
"coluna1"=>"valor1",
"coluna2"=>"valor2",
"coluna3"=>"valor3"
],
"AND",
"AND"
], 2);
Já sei (ou quase) como vou transformar esse array em parte do comando SQL, o problema é nos operadores. Como faço pra inserir cada um deles entre um valor e outro lá do sub-array WHERE? O que pretendo que retorne é isso:
WHERE coluna1=valor1 AND coluna2=valor2 AND coluna3=valor3
E eu não tinha pensado nisso ainda, mas onde vou inserir os operadores de comparação da coluna com valor (ex: =)?
Se alguém tiver uma sugestão de como fazer isso, agradeço :D
Obs, antes que alguém pergunte: preciso que seja um array porque os dados virão de um formulário com número incerto de campos (a classe também será usada manualmente)
Agradeço pela atenção, e até mais ^^
cara eu uso isso em insert update select tudo. porque economisa muito tempo.
te da uma dica.
e outra , se você tiver usando paginação, infelizmente tera que usar GET.
fasso assim o indice do array eo nome do campo da tabela eo valor eo que você esta querendo comprarar.
$a['campo1']='erison'
$a['campo2']='eu';
if(array_filter($a)){
foreach($a as $c=>$v){
$array[] = $c.'="'.$v.'"';
}
}$Where = ' Where'.implode(' and ',$array);
}
$Sql = 'Select * From tabela'.$Where;
$Qry = mysql_query($Sql);
em fim isso foi apenas uma ideia.
como eu uso função, eu ja passo a tabela,$_get, where principal. caso eu queira que ele ja inicie com uma condição.
ai em insert.
coloco
OBRIGATIRIO['CAMPO'] = 'ALGO';
AI EU VERIFICO SE ESSA ARRAY EXISTE, SE EXISTIR EU VEJO SE ESTA PREENCHIDA.
se for data
DATA['campo'] ='20/01/2012';
para quando for da o insert ou update chamar uma função de inverter a data para 2012-01-20
ai você tem que da uma estudada, em array.
pq você vai se deparar com muitos problemas.
como campos: inteiros, numericos, between.
No seu exemplo, sempre usará AND, mas preciso que possa usar OR também. Bom, mudei aqui a forma de usa da função, mais especificamente a parte do array pra melhorar um pouco:
$manager->fetch("table_test", "*", [
"WHERE"=>[
"`coluna1`"=>"`valor1`",
"AND",
"`coluna2`"=>"`valor2`",
"OR",
"`coluna3`"=>"`valor3`"
],
"=",
">=",
"<"
], 2);
Agora o operador entre uma validação e outra é um valor do array, fica mais fácil... não acho que vou ter nenhuma dificuldade em transformar isso numa string correta para uso no SQL (a não ser que o índice dos operadores [AND, OR...] também seja inserido na string, aí será um problema...).
O caso agora é: a melhor forma de passar os operadores da comparação coluna x valor foi usando um valor no array pra cada comparação dentro do array WHERE. Tive uma idéia aqui, vou testar, mas se alguém tiver uma sugestão de como transformar esse array aí nisso, agradeço:
WHERE coluna1=valor1 AND coluna2>=valor2 OR coluna3<valor3
cara se for so esses campos ai olha se da faz assim.
$a['campo1'] = 'campo1';
$a['2em1']['campo2'] = 'valor2';
$a['2em1']['campo3'] = 'Valor3';
if(array_key_exists('2em1',$a)){
foreach($a['2em1'] as $c=>$v){
$array_2[] = $c.'="'.$v.'"';
}
$array[] = implode(' OR ',$array_2);
unset($a['2em1']);
}
foreach($a as $c=>$v){
$array[] = $c.'="'.$v.'"';
}
$Where = implode(' AND ',$array);
echo 'Where '.$Where;Não são só esses, foram exemplos apenas...
Quero algo que funcione independente da quantidade de campos, dos nomes, dos valores, dos operadores, etc...
==========[ Edit ]==========
Estou precisando saber apenas isto para, provavelmente resolver esse problema: como posso pegar apenas valores de um array em que seu índice seja um inteiro (há valores com índice string)? Ex: array("a"=>"Teste", "b", "c", "d"=>"Testando"); Seria retornado um novo array contendo apenas os valores "b" e "c"... How? Obs: já tenho uma solução aqui, mas usa loop, se houver alguma função própria pra isso, melhor ainda :)
Até mais.
tente retonar assim
WHERE
coluna1=valor1ANDcoluna2=valor2ORcoluna3=valor3