• Domingo 22 de Diciembre de 2024, 06:28

Autor Tema:  Consulta A Varias Tablas  (Leído 1988 veces)

neorent

  • Miembro MUY activo
  • ***
  • Mensajes: 249
    • Ver Perfil
    • http://www.laestokada.cl
Consulta A Varias Tablas
« en: Lunes 8 de Octubre de 2007, 15:27 »
0
Estimado amigos de Solo codigos, tengo la siguente duda, resulta que me han encargado realizar una consulta la cual mediante unos check boxs, le permite a los usuarios seleccionar distintas tablas de una base de datos, el problema es que son 9 tablas y la unica relacion que pudiesen tener es el rut, entonces no tengo muy claro como generar la consulta, ya que no podria ser estatica, debido a que la seleccion de las tablas esta variando, yo estoy ocupando un codigo que me indico un usario antes con esto que es parecido, pero no se como generar el WHERE del SQL, espero que me puedan ayudar les dejo el codigo:


Este es el Consulta.php, donde selecciono las tablas.
Código: Text
  1.  
  2. <form name="b_tablas" method="post" action="b_tablas.php">
  3. <table width="100%" border="1" align="center" cellpadding="0" cellspacing="0">
  4. <tr>
  5. <td colspan="9" align="center" class="Estilo6">MARQUE LOS RANGOS QUE DESEA BUSCAR</td>
  6. </tr>
  7. <tr>
  8. <td>PATENTES</td>
  9. <td>LICENCIAS DE CONDUCIR</td>
  10. <td>PERMISOS DE CIRCULACIÓN</td>
  11. <td>ASEO</td>
  12. <td>RIM</td>
  13. <td>ALUMNOS</td>
  14. <td>APODERADOS</td>
  15. <td>ORGANIZACIONES COMUNITARIAS</td>
  16. </tr>
  17. <tr>
  18. <td><input type="checkbox" name="patentes" value="patentes" /></td>
  19. <td><input type="checkbox" name="licencias" value="licencias" /></td>
  20. <td><input type="checkbox" name="pci" value="pci" /></td>
  21. <td><input type="checkbox" name="aseo" value="aseo" /></td>
  22. <td><input type="checkbox" name="rim" value="rim" /></td>
  23. <td><input type="checkbox" name="alumnos" value="alumnos" /></td>
  24. <td><input type="checkbox" name="apoderados" value="apoderados" /></td>
  25. <td><input type="checkbox" name="org_comunitarias" value="org_comunitarias" /></td>
  26. </tr>
  27. <tr>
  28. <td colspan="9" align="center"><input name="Submit2" type="submit" class="Estilo6" value="Buscar"/>
  29.     <input name="Limpiar2" type="reset" class="Estilo6" id="Limpiar2" value="Limpiar" />
  30.     <input name="Volver2" type="button" class="Estilo6" id="Volver2" value="Volver" onclick="volver()" /></td>
  31. </tr>
  32. </table>
  33. </form>
  34. <script>
  35. function volver()
  36. {
  37. setTimeout("<?php echo "location.href='menu.php'";?>", 1);
  38. }
  39. </script>
  40.  
  41.  
  42.  

y aqui donde se supone que debo buscar

b_tablas.php
Código: Text
  1.  
  2. <?
  3. //RECIBO VARIABLES LAS CUALES SERAN LOS NOMBRES DE LAS TABLAS
  4. $patentes=$_POST['patentes'];
  5. $licencias=$_POST['licencias'];
  6. $pci=$_POST['pci'];
  7. $aseo=$_POST['aseo'];
  8. $rim=$_POST['rim'];
  9. $alumnos=$_POST['alumnos'];
  10. $apoderados=$_POST['apoderados'];
  11. $org_comunitarias=$_POST['org_comunitarias'];
  12. //FIN RECIBO DE VARIABLES
  13. ?>
  14.  
  15. <?
  16. //ESTABLESCO CONEXION CON MI BASE DE DATOS
  17. $link = mysql_connect("localhost","123","123");
  18. mysql_select_db("db_clt_municipales",$link);
  19. //FIN
  20. ?>
  21.  
  22. <?
  23. //AQUI GENERO LA CONSULTA HASTA EL FROM
  24. $sql="SELECT * ";
  25. $from="FROM personal, ";
  26. if($patentes<>NULL)$from.= "patentes, ";
  27. if($licencias<>NULL)$from.= "licencias, ";
  28. if($pci<>NULL)$from.= "pci, ";
  29. if($aseo<>NULL)$from.= "aseo, ";
  30. if($rim<>NULL)$from.= "rim, ";
  31. if($alumnos<>NULL)$from.= "alumnos, ";
  32. if($apoderados<>NULL)$from.= "apoderados, ";
  33. if($org_comunitarias<>NULL)$from.= "org_comunitarias, ";
  34. if($from<>"FROM ")
  35. {
  36.   //eliminamos el último ", "
  37.   $from=substr($from,0,strlen($from)-2);
  38.   //concatenamos los criterios a la consulta
  39.   $sql.=" $from";
  40. }
  41. ?>
  42.  
  43.  

Como veran solo llegue hasta el FROM del sql, y no se como hacer el resto, no pido que lo hagan solo que me digan que lo haga de alguna manera, muchas gracias por leer este post,
saludos a todos,
Neo.
Un Tigre Nunka Kambia Sus Rayas

Avalon

  • Miembro MUY activo
  • ***
  • Mensajes: 448
    • Ver Perfil
Re: Consulta A Varias Tablas
« Respuesta #1 en: Lunes 8 de Octubre de 2007, 16:25 »
0
Hola neorent. Puedes hacerlo usando UNION . Si el rut está presente en todas las tablas y suponiendo que el valor del rut lo tienes en una variable sería algo así

<!--php1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>PHP </td></tr><tr><td id='CODE'><!--ephp1--><code>[color= #000000]
[color= #0000BB]<?
[/color][color= #FF8000]//AQUI GENERO LA CONSULTA
[/color][color= #0000BB]$sql[/color][color= #007700]=[/color][color= #DD0000]"SELECT * FROM personal WHERE rut=$rut"[/color][color= #007700];
if([/color][color= #0000BB]$patentes[/color][color= #007700]<>[/color][color= #0000BB]NULL[/color][color= #007700])[/color][color= #0000BB]$sql[/color][color= #007700].= [/color][color= #DD0000]" UNION SELECT * FROM patentes WHERE rut=$rut"[/color][color= #007700];
if([/color][color= #0000BB]$licencias[/color][color= #007700]<>[/color][color= #0000BB]NULL[/color][color= #007700])[/color][color= #0000BB]$sql[/color][color= #007700].= [/color][color= #DD0000]" UNION SELECT * FROM licencias WHERE rut=$rut"[/color][color= #007700];
if([/color][color= #0000BB]$pci[/color][color= #007700]<>[/color][color= #0000BB]NULL[/color][color= #007700])[/color][color= #0000BB]$sql[/color][color= #007700].= [/color][color= #DD0000]" UNION SELECT * FROM pci  WHERE rut=$rut"[/color][color= #007700];
...
...
}
[/color][color= #0000BB]?>
[/color]
[/color]
</code><!--php2--></td></tr></table><div class='postcolor'><!--ephp2-->

El código se puede optimizar pero la consulta resultante debería ser algo parecido a la almacenada en $sql

Espero te sirva.

Salu2,
Avalon

neorent

  • Miembro MUY activo
  • ***
  • Mensajes: 249
    • Ver Perfil
    • http://www.laestokada.cl
Re: Consulta A Varias Tablas
« Respuesta #2 en: Lunes 8 de Octubre de 2007, 16:47 »
0
claro seria muy buena idea, pero el rut no llega osea no me es entregado de ninguna forma y tampoco debe ser selecionado. Osea debe ser asi

tienes 9 tablas y 9 checbox, entonces segun las tablas que selecciones debes hacer lo siguiente, crear un SELECT * FROM tablas seleccionadas, donde la tabla que tenga mayor registros de la seleccionada debe ser comparada con las otras por el campo rut, osea imagina que seleccionas tres tablas

tabla1, tabla2 y tabla3, la tabla con mayor registros es la tabla3, tonces la consulta deberia quedar asi

SELECT * from tabla1, tabla2, tabla3 WHERE tabla3.rut = tabla1.rut AND tabla3.rut=tabla2.rut

el tema complicado es que no tengo ni la menor idea de como hacerlo por eso pregunto aca para ver si me pueden dar una idea y bueno agradesco mucho Avalon tu ayuda, espero que me puedan seguir ayudando desde ya muchas gracias,
saludos,
Neo.
Un Tigre Nunka Kambia Sus Rayas

Avalon

  • Miembro MUY activo
  • ***
  • Mensajes: 448
    • Ver Perfil
Re: Consulta A Varias Tablas
« Respuesta #3 en: Lunes 8 de Octubre de 2007, 17:04 »
0
Ah, entiendo. En ese caso podrías hacerlo usando LEFT JOIN


<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->[color=blue;font-weight]SELECT[/color] * FROM tabla1 LEFT JOIN tabla2 ON (tabla2.rut=tabla1.rut) LEFT JOIN tabla3 ON (tabla3.rut=tabla1.rut) <!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->

A ver si eso te sirve.

Salu2,
Avalon