Ir para conteúdo
Fórum Script Brasil
  • 0

Consulta usando AND e OR (AJUDA)


Montano

Pergunta

boa tarde.

meu problema é o seguinte. meu programa teria que fazer todos tipos de consultas possiveis envolvendo 8 dados.

para mim não encher de if, e me matar fazer combinações, criei uma variacel qualquer chamada $t. função dela é armazenar pedacinhos da consulta que o usuario pedir.

EX:

if ($produto != "")

{

if ($t != "")

{

$t = "$t and cod_produto = '$produto'";

}

else

{

$t = "cod_produto = '$produto'";

}

}

if ($tamanho != "")

{

if ($t != "")

{

$t = "$t and tamanho = '$tamanho'";

}

else

{

$t = "tamanho = '$tamanho'";

}

}

DIGAMOS QUE O USUARIO ESCOLHEU CAMISETA = POLO, TAMANHO = G

$sql = "select * from tb_contrato where $t ORDER BY cod_contrato ASC";

$result = mysql_query($sql);

$linha = mysql_num_rows($result);

se der um echo $sql; vai ficar assim:

$sql = "select * from tb_contrato where cod_produto = $produto and tamanho = $tamanho ORDER BY cod_contrato ASC";

Até ai tudo bem, pudi fazer qualquer combinaçao de consulta.. agora eu quero que o usuario marque em alguns check box, as 4 escolhas. AND. OR, < , > ;

escolhendo AND (ele fara a consulta que nos acabamos de fazer)

escolhendo OR (ele continuara fazendo a consulta and, mas acrescentara um or.)

EX:

if ($and == "on")

{

if ($produto != "")

{

if ($t != "")

{

$t = "$t and cod_produto = '$produto'";

}

else

{

$t = "cod_produto = '$produto'";

}

}

}

-----------------------------------------------

if ($or == "on")

{

if ($produto != "")

{

if ($t != "")

{

$t = "$t or cod_produto = '$produto'";

}

}

}

o sql deveria ficar assim .

$sql = "select * from tb_contrato where cod_produto = $produto or cod_produto = $produto ORDER BY cod_contrato ASC";

me surjiu 2 problemas

1ª terie que usar 1 campo só para produto. e a consulta tem que manter a variavel anterio no 1ª $produto, e a nova no 2ª

para não fica cod_produto = POLO or cod_produto = POLO . mesmo o usuario tendo escolhido outra camiseta antes.

2ª ele só faz a pesquiza no or com o and, se os dois checkbox estiverem marcado. o.O (não sei porque)

por favor , se alguém souber de uma ideia para facilitar essas consultas. agradeço

obrigado

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Olá!

Eu acho que, como eu, muitas pessoas não entenderam o que você quer. Todavia, teria como tu colocares mais idéias ou expressá-las melhor?

Desculpe =$

Link para o comentário
Compartilhar em outros sites

  • 0

Na minha oponião a tua lógica não tem lógica, primeiro voce diz que não quer se matar nos ifs, mas o que você faz examante?! Não é encher o script de ifs? Além do que, se você quer montar uma query encadeada, não vai conseguir escapar dos ifs, a lógica que eu julgo correta é.

Primeiro, use um RADIO e não um CHECKBOX para o usuário escolher se quer "E" (AND) ou "OU" (OR).

Segundo, na hora de montar, já coloque a seleção do usuário no topo...

$tipo_consulta = $_POST['valor vindo do radio'];

Terceiro, a partir disso coloque os campos...

<?php

$tipo_consulta = $_POST['valor vindo do radio'];

$query = '1=1';
if(!empty($campo1)){

$query .= " $tipo_consulta campo1='$campo1'";
}

if(!empty($campo2)){

$query .= " $tipo_consulta campo2='$campo2'";
}

if(!empty($campo3)){

$query .= " $tipo_consulta campo3='$campo3'";
}

$sql = mysql_query("SELECT * FROM tabela WHERE $query");

Note que o $query = '1=1';

É só pra evitar um erro, caso nenhum dos ifs abaixo seja verdadeiro... isso é um gambiarra que você deve remover de acordo com a estrutura do seu BD.

Link para o comentário
Compartilhar em outros sites

  • 0

obrigado pela ideia, voce tem razao..

não querendo pedir muito, eu não consigo pensar em uma maneira dele escolher consultas por mais de uma cidade, usando somente 1 select option..

digamos assim, tem o select option la da cidade q ele queh pesquizar para gerar o relatorio .. pesquizando 1 só tudo bem, mas ele vai precisa pesquizar tipo assim. mais de duas cidades, ou então menos duas cidades (de todas que tão no banco).

pensei em salvar a consulta no BD "fazendo um radio de "Manter consulta". ele pesquizaria uma cidade, pedia para manter a consulta, e pesquizaria outra. e assim por diante. bom, não funciono, axo que até postei essa ideia em outro tópico. tenho que termina esse trabalho essa semana. e ainda n consigo pensar em algo para facilitar as consultas mais personalizadas. estava pensando em fazer 1 pop up. caso o usuario queria fazer uma pesquiza mais avançada. inserindo nos meus select um <option> Personalizar</option>

obrigado pela atençao..

Link para o comentário
Compartilhar em outros sites

  • 0
Na minha oponião a tua lógica não tem lógica, primeiro voce diz que não quer se matar nos ifs, mas o que você faz examante?! Não é encher o script de ifs? Além do que, se você quer montar uma query encadeada, não vai conseguir escapar dos ifs, a lógica que eu julgo correta é.

Primeiro, use um RADIO e não um CHECKBOX para o usuário escolher se quer "E" (AND) ou "OU" (OR).

Segundo, na hora de montar, já coloque a seleção do usuário no topo...

$tipo_consulta = $_POST['valor vindo do radio'];

Terceiro, a partir disso coloque os campos...

<?php

$tipo_consulta = $_POST['valor vindo do radio'];

$query = '1=1';
if(!empty($campo1)){

$query .= " $tipo_consulta campo1='$campo1'";
}

if(!empty($campo2)){

$query .= " $tipo_consulta campo2='$campo2'";
}

if(!empty($campo3)){

$query .= " $tipo_consulta campo3='$campo3'";
}

$sql = mysql_query("SELECT * FROM tabela WHERE $query");

Note que o $query = '1=1';

É só pra evitar um erro, caso nenhum dos ifs abaixo seja verdadeiro... isso é um gambiarra que você deve remover de acordo com a estrutura do seu BD.

o valor que vem do radio que estao no $tipo_consulta não seria "ON"

aqui n deu seu codigo.. o echo sql; esta dando Resource id #8

obrigado

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...