Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] QUERY para conocer un tipo_campo y mostrar un link u otro

Estas en el tema de QUERY para conocer un tipo_campo y mostrar un link u otro en el foro de PHP en Foros del Web. Muy buenas foreros!!!. Tengo una BD con 2 tablas (clientes,trabajos) relacionadas por codcliente. Por medio de un formulario con un campo INPUT busco palabras clave ...
  #1 (permalink)  
Antiguo 08/05/2014, 13:19
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 2 meses
Puntos: 17
Pregunta QUERY para conocer un tipo_campo y mostrar un link u otro

Muy buenas foreros!!!.

Tengo una BD con 2 tablas (clientes,trabajos) relacionadas por codcliente.

Por medio de un formulario con un campo INPUT busco palabras clave en los campos descripcion o observacion de mi tabla trabajos.

Hago 2 consultas una para pintar una tabla con tipo_cliente = particulares y otra para tipo_cliente = empresa. Pero lo raro es que se repiten los datos en ambas tablas sin importar esa parte del WHERE AND cl.tipo_cliente = 'empresa'

Mis consultas son.

Código PHP:
Ver original
  1. <?php
  2.                
  3.                     $keyword = $_POST['keyword'];
  4.                    
  5.                
  6.                     include ("abre_conexion.php");
  7.                    
  8.                    
  9.                     $query1 = "SELECT cl.codcliente, tr.codtrabajo, cl.nombre, cl.apellido, cl.dni, cl.telefono, cl.email,
  10.                                     cl.nom_fiscal, tr.estado, tr.tipo_trabajo, tr.observacion, tr.descripcion, tr.precio, tr.pagado
  11.                                 FROM $tabla_db1 cl, $tabla_db2 tr
  12.                                 WHERE cl.tipo_cliente = 'particular'
  13.                                 AND cl.codcliente = tr.codcliente
  14.                                 AND tr.observacion LIKE '%$keyword%'
  15.                                 OR tr.descripcion LIKE '%$keyword%'
  16.                                 GROUP BY tr.codtrabajo
  17.                                 ";
  18.                                        
  19.                     $result = mysql_query($query1);
  20.                    
  21.                                    
  22.                         echo "
  23.                             Palabra de busqueda: <b>$keyword</b>
  24.                            
  25.                             <br/><br/>
  26.                             ";
  27.                        
  28.                                    
  29.                     echo "
  30.                                                
  31.                             <h3> Listado de Trabajos de Particulares. </h3><br/>
  32.                             Para ver los trabajos presione el bot&oacute;n <strong> ver </strong> en la parte derecha.<br/><br/>
  33.                         ";
  34.                        
  35.                     echo "
  36.                                     <form action='consultarcliente3.php' method='post' >
  37.                                     <div align='center' id='padtabla'>
  38.                                         <table class='sortable' align='center' border='1' width='100%'>
  39.                                        
  40.                                             <tr align='center' bgColor='#FFBF00'>
  41.                                                 <td> <strong> Cod Trabajo </strong>             </td>
  42.                                                 <td> <strong> Cod Cliente </strong>             </td>
  43.                                                 <td> <strong> Nombre</strong>                   </td>
  44.                                                 <td> <strong> Nom. Fiscal </strong>             </td>
  45.                                                 <td> <strong> DNI </strong>                     </td>
  46.                                                 <td> <strong> Tel&eacute;fono  </strong>        </td>
  47.                                                 <td> <strong> Email </strong>                   </td>
  48.                                                 <td> <strong> Estado </strong>                  </td>
  49.                                                 <td> <strong> Tipo&nbsp;Trabajo </strong>       </td>
  50.                                                 <td> <strong> Observaci&oacute;n </strong>      </td>
  51.                                                 <td> <strong> Descripci&oacute;n </strong>      </td>
  52.                                                 <td> <strong> Presupuesto </strong>             </td>
  53.                                                 <td> <strong> Pagado </strong>                  </td>
  54.                                                 <td> <strong> Ver Informe </strong>             </td>
  55.                                             </tr>
  56.                                
  57.                                     ";
  58.                            
  59.                             while ($registro = mysql_fetch_array($result)) {
  60.                                 echo "    
  61.                                            
  62.                                             <tr align='center'>
  63.                                                 <td>".$registro['codtrabajo']."</td>
  64.                                                 <td>".$registro['codcliente']."</td>
  65.                                                 <td>".$registro['nombre']."&nbsp;".$registro['apellido']."</td>
  66.                                                 <td>".$registro['nom_fiscal']."</td>   
  67.                                                 <td>".$registro['dni']."</td>  
  68.                                                 <td>".$registro['telefono']."</td>
  69.                                                 <td>".$registro['email']."</td>
  70.                                                 <td>".$registro['estado']."</td>
  71.                                                 <td>".$registro['tipo_trabajo']."</td>
  72.                                                 <td>".$registro['observacion']."</td>
  73.                                                 <td>".$registro['descripcion']."</td>
  74.                                                 <td>".$registro['precio']."</td>
  75.                                                 <td>".$registro['pagado']."</td>
  76.                                                 <td width='5%' align='center'>
  77.                                                     <a href='ver_trabajos_particular1.php?id=".$registro["codtrabajo"]."'> Ver </a>
  78.                                                 </td>
  79.                                             </tr>
  80.                                            
  81.                                     ";
  82.                              }  //CIERRA WHILE
  83.                              ?>
  84.                                                            
  85.                                         </table>
  86.                                     </div>
  87.            
  88.                            
  89.                     <?php  
  90.                
  91.                     // QUERY PARA EMPRESAS
  92.                     $query2 = "SELECT cl.codcliente, tr.codtrabajo, cl.nom_comercial, cl.telefono, cl.email, cl.web,
  93.                                 tr.tipo_trabajo, tr.observacion, tr.descripcion, tr.precio, tr.pagado
  94.                             FROM $tabla_db1 cl, $tabla_db2 tr
  95.                             WHERE cl.codcliente = tr.codcliente
  96.                             AND cl.tipo_cliente = 'empresa'
  97.                             AND tr.observacion LIKE '%$keyword%'
  98.                             OR tr.descripcion LIKE '%$keyword%'
  99.                             GROUP BY tr.codtrabajo
  100.                             ";
  101.                                        
  102.                     $result2 = mysql_query($query2);
  103.                    
  104.                                    
  105.                     echo "
  106.                             <br/>
  107.                             <br/><br/> <h3> Listado de trabajos de Empresas. </h3><br/>
  108.                                
  109.                         ";
  110.                        
  111.                     echo "
  112.                                     <form action='consultarcliente3.php' method='post' >
  113.                                     <div align='center' id='padtabla'>
  114.                                         <table class='sortable' align='center' border='1' width='100%'>
  115.                                        
  116.                                             <tr align='center' bgColor='#FFBF00'>
  117.                                                 <td> <strong> Cod Trabajo </strong>             </td>
  118.                                                 <td> <strong> Cod Cliente </strong>             </td>
  119.                                                 <td> <strong> Nombre Comercial</strong>         </td>
  120.                                                 <td> <strong> Tel&eacute;fono  </strong>        </td>
  121.                                                 <td> <strong> Email </strong>                   </td>
  122.                                                 <td> <strong> Web </strong>                     </td>
  123.                                                 <td> <strong> Tipo&nbsp;Trabajo </strong>       </td>
  124.                                                 <td> <strong> Observaci&oacute;n </strong>      </td>
  125.                                                 <td> <strong> Descripci&oacute;n </strong>      </td>
  126.                                                 <td> <strong> Presupuesto </strong>             </td>
  127.                                                 <td> <strong> Pagado </strong>                  </td>
  128.                                                 <td> <strong> Ver Informe </strong>             </td>
  129.                                             </tr>
  130.                                
  131.                                     ";
  132.                            
  133.                             while ($registro2 = mysql_fetch_array($result2)) {
  134.                                 echo "    
  135.                                            
  136.                                             <tr align='center'>
  137.                                                 <td>".$registro2['codtrabajo']."</td>
  138.                                                 <td>".$registro2['codcliente']."</td>
  139.                                                 <td>".$registro2['nom_comercial']."</td>
  140.                                                 <td>".$registro2['telefono']."</td>
  141.                                                 <td>".$registro2['email']."</td>
  142.                                                 <td>".$registro2['web']."</td>                                             
  143.                                                 <td>".$registro2['tipo_trabajo']."</td>
  144.                                                 <td>".$registro2['observacion']."</td>
  145.                                                 <td>".$registro2['descripcion']."</td>
  146.                                                 <td>".$registro2['precio']."</td>
  147.                                                 <td>".$registro2['pagado']."</td>
  148.                                                 <td width='5%' align='center'>
  149.                                                     <a href='ver_trabajos_empresa1.php?id=".$registro2["codtrabajo"]."'> Ver </a>
  150.                                                 </td>
  151.                                             </tr>
  152.                                            
  153.                                     ";
  154.                              }  //CIERRA WHILE
  155.                              
  156.                    
  157.                              ?>
  158.                                                            
  159.                                         </table>
  160.                                     </div>

¿Porque se repite la busqueda por las palabras, ?es decir si hay un cliente particular con la palabra de busqueda, a veces se muestra en las 2 tablas y no deberia.
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #2 (permalink)  
Antiguo 08/05/2014, 13:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: QUERY para conocer un tipo_campo y mostrar un link u otro

Por un lado, porque estás agrupando por codigo de trabajo, y no por cliente.
Por otro lado, el OR es una disyunción, cortando las condiciones del WHERE en dos y tomando ambas partes como evaluaciones por separado. Eso empeora la cosa.
Si quieres que ambos operen como una única condición, sería:
Código MySQL:
Ver original
  1. SELECT cl.codcliente, tr.codtrabajo, cl.nombre, cl.apellido, cl.dni, cl.telefono, cl.email,
  2.     cl.nom_fiscal, tr.estado, tr.tipo_trabajo, tr.observacion, tr.descripcion, tr.precio, tr.pagado
  3. FROM $tabla_db1 cl INNER JOIN $tabla_db2 tr ON cl.codcliente = tr.codcliente
  4. WHERE cl.tipo_cliente = 'particular'
  5.             AND (
  6.             tr.observacion LIKE '%$keyword%'
  7.             OR tr.descripcion LIKE '%$keyword%'
  8.             )
  9. GROUP BY cl.codcliente
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 08/05/2014, 14:36
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 2 meses
Puntos: 17
Respuesta: QUERY para conocer un tipo_campo y mostrar un link u otro

Amigo perfecto!!!.
Es correcto antes los tenía entre () la parte del OR, pero como veía que no funcionaba pense en quitarlos, claramente esa no era la solución antes era peor, como bien me has dicho.

Tan sólo una duda grande (ya que nunca he entendido bien el uso de INNER JOIN), que hace esa parte de código
Código SQL:
Ver original
  1. FROM $tabla_db1 cl INNER JOIN $tabla_db2 tr ON cl.codcliente = tr.codcliente

es esto lo mismo a esto:
Código SQL:
Ver original
  1. FROM $tabla_db1 cl, $tabla_db2 tr
  2. WHERE cl.codcliente = tr.codcliente

Es que muchas veces he visto el INNER JOIN ON pero nunca lo he usado, no fue la forma en que me enseñaron y tampoco la he investigado mucho.

Gracias por tu ayuda!!!! Haré pruebas para ver que no se repite el cliente, un saludo!!!

MIL GRACIAS

EDITO:

He probado y bien, estoy agrupando por codtrabajo.. Porque pueden haber varios trabajos del mismo cliente por lo tanto quiero que se muestren todos los trabajos de los clientes y si agrupo por codcliente, solo se mostrará el primero.

Esa es la razón por la que agrupo por tr.codtrabajo.
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1

Última edición por HackID1; 08/05/2014 a las 14:46
  #4 (permalink)  
Antiguo 08/05/2014, 15:17
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: QUERY para conocer un tipo_campo y mostrar un link u otro

El INNER JOIN con ON es una forma más usual en MySQL, SQL Server y otros. Las viejas versiones de Oracle lo hacen en el WHERE.
A nivel de MySQL, es preferible ON..., porque de ese modo el matching se aplica durante la lectura de registros, mientras que si lo haces en en WHERE lo hace después de leer todo.
La diferencia es de performance, y sólo lo notarás cuando tengas decenas de miles de registros. Con unos pocos es imperceptible.
En pocas palabras, MySQL puede optimizar las condiciones del ON, pero no lo hace con el WHERE. Es mejor hacer JOIN explícitos y no implicitos porque los implicitos tieneden a generar productos cartesianos y errores de resultados, producto de columnas connombres idénticos que tienen datos que no están relacionados.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 09/05/2014, 12:33
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 2 meses
Puntos: 17
Respuesta: QUERY para conocer un tipo_campo y mostrar un link u otro

Entendido y Gracias por tu aclaración.
Decir el código me ha funcionado perfecto siempre, muchas gracias de verdad este es el mejor foro de informática que conozco.

;)
Tema Cerrado
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1

Etiquetas: conocer, formulario, link, mysql, query, registro, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:21.