Consulta de 1 o varios campos???

Duckds

Bovino maduro
#1
Que tal comuna tengo una duda espero me puedan ayudar a resolverla:

Lo que pasa es que tengo un formulario en PHP el cual me hace una consulta a una base de datos, el detalle es que el formulario consta de 5 campos, por el momento si se hacen las consultas por cada uno de los campos diferentes funciona sin ningun problema, el detalle es que si quiero hacer la consulta por 2 o mas campos no funciona correctamente, es decir tengo lo siguiente:

Nombre:_________________________
Apellido Paterno:_____________________
Apellido Materno:____________________
Num credito:________________________
Num cuenta:________________________

como les comento si hago la consulta por un campo si funciona pero quiero reducir mas el numero de resultados al hacer la consulta con mas campos es decir si pongo JUAN me saldran 200 registros con el nombre juan, pero al darle JUAN PEREZ que me salgan 10 ya es una ganancia.

tengo lo siguiente:

Código:
<?php
include (conexion.php);

        if($nombre != null && $appaterno==null && $apmaterno==null && $num_cuenta==null && $num_credito==null){
 $consulta = 'SELECT P.id_personal, P.num_cuenta, P.nombre_completo, P.nombre, P.apellido_paterno, P.apellido_materno, C.id_personal, C.id_credito, C.num_credito, C.nombre_producto FROM personales P, credito C WHERE (P.nombre like "%'.$nombre.'%" OR P.nombre_completo LIKE "%'.$nombre.'%") AND P.id_personal=C.id_personal ORDER BY nombre;';
    
    if($appaterno != null){
    $consulta = 'SELECT P.id_personal, P.num_cuenta, P.nombre_completo, P.nombre, P.apellido_paterno, P.apellido_materno, C.id_personal, C.id_credito, C.num_credito, C.nombre_producto FROM personales P, credito C WHERE (P.apellido_paterno like "%'.$appaterno.'%" OR P.nombre_completo LIKE "%'.$appaterno.'%") AND P.id_personal=C.id_personal ORDER BY nombre;';
    }
    
    if($apmaterno != null){
    $consulta = 'SELECT P.id_personal, P.num_cuenta, P.nombre_completo, P.nombre, P.apellido_paterno, P.apellido_materno, C.id_personal, C.id_credito, C.num_credito, C.nombre_producto FROM personales P, credito C WHERE (P.apellido_materno like "%'.$apmaterno.'%" OR P.nombre_completo LIKE "%'.$appaterno.'%" AND P.id_personal=C.id_personal ORDER BY nombre;';
    }
    
    if($num_credito != null){
    $consulta = 'SELECT P.id_personal, P.num_cuenta, P.nombre_completo, P.nombre, P.apellido_paterno, P.apellido_materno, C.id_personal, C.id_credito, C.num_credito, C.nombre_producto FROM personales P, credito C WHERE c.num_credito='.$num_credito.' AND P.id_personal=C.id_personal ORDER BY nombre;';
    }
    
    if($num_cuenta != null){
    $consulta = 'SELECT P.id_personal, P.num_cuenta, P.nombre_completo, P.nombre, P.apellido_paterno, P.apellido_materno, C.id_personal, C.id_credito, C.num_credito, C.nombre_producto FROM personales P, credito C WHERE c.num_cuenta='.$num_cuenta.' AND P.id_personal=C.id_personal ORDER BY nombre;';
    }
Esto me muestra los resultados de cada uno de los campos con el que se hizo la consulta pero quiero, como lo digo arriba, que se pueda hacer consultas con dos o mas campos para reducir el numero de resultados.

Intente meter un CASE segun el numero de campos elegidos, pero no me jalo, o no se si este bien mi codigo, intente con esto:

Código:
if($nombre != null && $appaterno == null && $apmaterno == null && $num_cuenta == null && $num_credito == null)
    {
        $caso=1;
        return $caso;
    }
    
    if($nombre == null && $appaterno != null && $apmaterno == null && $num_cuenta == null && $num_credito == null)
    {
        $caso=2;
        return $caso;
    }
    
    if($nombre == null && $appaterno == null && $apmaterno != null && $num_cuenta == null && $num_credito == null)
    {
        $caso=3;
        return $caso;
    }
    
    if($nombre == null && $appaterno == null && $apmaterno == null && $num_cuenta != null && $num_credito == null)
    {
        $caso=4;
        return $caso;
    }
    
    if($nombre == null && $appaterno == null && $apmaterno == null && $num_cuenta == null && $num_credito != null)
    {
        $caso=5;
        return $caso;
    }
    
    if($nombre != null && $appaterno != null && $apmaterno == null && $num_cuenta == null && $num_credito == null)
    {
        $caso=6;
        return $caso;
    }

switch ($caso)
    {
        case 1:
            $consulta = 'SELECT P.id_personal, P.num_cuenta, P.nombre_completo, P.nombre, P.apellido_paterno, P.apellido_materno, C.id_personal, C.id_credito, C.num_credito, C.nombre_producto FROM personales P, credito C WHERE (P.nombre like "%'.$nombre.'%" OR P.nombre_completo LIKE "%'.$nombre.'%") AND P.id_personal=C.id_personal ORDER BY nombre;';
            break;
        case 2:        
            $consulta = 'SELECT P.id_personal, P.num_cuenta, P.nombre_completo, P.nombre, P.apellido_paterno, P.apellido_materno, C.id_personal, C.id_credito, C.num_credito, C.nombre_producto FROM personales P, credito C WHERE (P.apellido_paterno like "%'.$appaterno.'%" OR P.nombre_completo LIKE "%'.$appaterno.'%") AND P.id_personal=C.id_personal ORDER BY nombre;';        
            break;
        case 3:
            $consulta = 'SELECT P.id_personal, P.num_cuenta, P.nombre_completo, P.nombre, P.apellido_paterno, P.apellido_materno, C.id_personal, C.id_credito, C.num_credito, C.nombre_producto FROM personales P, credito C WHERE (P.apellido_materno like "%'.$apmaterno.'%" OR P.nombre_completo LIKE "%'.$appaterno.'%" AND P.id_personal=C.id_personal ORDER BY nombre;';
            break;            
        case 4:
            $consulta = 'SELECT P.id_personal, P.num_cuenta, P.nombre_completo, P.nombre, P.apellido_paterno, P.apellido_materno, C.id_personal, C.id_credito, C.num_credito, C.nombre_producto FROM personales P, credito C WHERE c.num_credito='.$num_credito.' AND P.id_personal=C.id_personal ORDER BY nombre;';
            break;            
        case 5:
            $consulta = 'SELECT P.id_personal, P.num_cuenta, P.nombre_completo, P.nombre, P.apellido_paterno, P.apellido_materno, C.id_personal, C.id_credito, C.num_credito, C.nombre_producto FROM personales P, credito C WHERE c.num_cuenta='.$num_cuenta.' AND P.id_personal=C.id_personal ORDER BY nombre;';
            break;            
        case 6:
            $nombrecompleto = $nombre." ".$appaterno;        
            $consulta = 'SELECT P.id_personal, P.num_cuenta, P.nombre_completo, P.nombre, P.apellido_paterno, P.apellido_materno, C.id_personal, C.id_credito, C.num_credito, C.nombre_producto FROM personales P, credito C WHERE (P.nombre like "%'.$nombrecompleto.'%" OR P.apellido_paterno LIKE "%'.$nombrecompleto.'%" OR P.nombre_completo LIKE "%'.$nombrecompleto.'%") AND P.id_personal=C.id_personal ORDER BY nombre;';
            break;
Bueno asi lo intente pero no me funciono creo que tengo algo mal.

Espero me ayuden muchas gracias

EXITO!!
 

registro500

Bovino adolescente
#2
revisando tu codigo encontre que en el caso 6
Código:
            case 6:
            $nombrecompleto = $nombre." ".$appaterno;        
            $consulta = 'SELECT P.id_personal, P.num_cuenta, P.nombre_completo,.....
intentas encontrar 'nombre apellidoPat' en un campo en donde solo existe uno de ellos... posiblemente ahi salga resultados no deseado

despues de reflexionar poco me puse creame un tabla... con estos datos y campos
Código:
     id  nom  pat  mat  
      1 juan Perez velazquez 
      2 juan perez perez 
      3 juan perez rodriguez 
      4 juan rodriguez perez 
      5 juan paz ramos 
      6 juan paz patres
aplicando: SELECT * FROM `persona` WHERE concat(nom,pat,mat) like 'juan%'
Código:
      1 juan Perez velazquez 
      2 juan perez perez 
      3 juan perez rodriguez 
      4 juan rodriguez perez 
      5 juan paz ramos 
      6 juan paz patres
SELECT * FROM `persona` WHERE concat(nom,pat,mat) like 'juanperez%'
Código:
      1 juan Perez velazquez 
      2 juan perez perez 
      3 juan perez rodriguez
SELECT * FROM `persona` WHERE concat(nom,pat,mat) like 'juanpaz%'
Código:
      5 juan paz ramos 
      6 juan paz patres
SELECT * FROM `persona` WHERE concat(nom,pat,mat) like 'juanp%'
Código:
      1 juan Perez velazquez 
      2 juan perez perez 
      3 juan perez rodriguez 
      5 juan paz ramos 
      6 juan paz patres
SELECT * FROM `persona` WHERE concat(nom,pat,mat) like 'juanperezper%'
Código:
    2 juan perez perez
 
Arriba