Foros del Web » Programando para Internet » PHP »

PHP OO Consultar registros que no existan en otra tabla

Estas en el tema de Consultar registros que no existan en otra tabla en el foro de PHP en Foros del Web. Tengo una consulta con mysql y php donde deseo obtener los usuarios asociados a un proyecto, tengo unos campos checkbox por medio de un form ...
  #1 (permalink)  
Antiguo 15/11/2011, 14:36
 
Fecha de Ingreso: noviembre-2011
Mensajes: 8
Antigüedad: 12 años, 5 meses
Puntos: 0
Consultar registros que no existan en otra tabla

Tengo una consulta con mysql y php donde deseo obtener los usuarios asociados a un proyecto, tengo unos campos checkbox por medio de un form donde listo los usuarios:

Código PHP:
<form action="graficos_colaboradores.php" method="post" id="fo3" name="fo3">
                        <table width="100%">
                            <?
if ($usuarios 0) {

                            while (
$usuario mysql_fetch_object($consulta1)) {
                            
?>
                            <tr class="intA" valign="top">
                                <td align="left"><h3><?= $usuario -> nombre
                                ?>
</h3></td>
                                <td align="left"><? echo '<input type="checkbox" id="user" name="usuarios[]" value="' $usuario -> idUsuario '" style="margin: 0px"  />';?></td>
                            </tr>
                            <? }?>
                            <tr>
                                <td colspan="2">
                                <input type="submit" name="button" id="button" value="Enviar"  />
                                </td>
                                <?    } else {?>
                            </tr>
                            <tr>
                                <td colspan="2">No hay colaboradores disponibles</td>
                            </tr>
                            <?
                            
}
                            
?>
                        </table>
                    </form>
este envia los datos mediante ajax-jquery:

Código HTML:
<script language="javascript">
	$.noConflict();
	jQuery(document).ready(function() {
		// Interceptamos el evento submit
		jQuery('#fo3').submit(function() {
			// Enviamos el formulario usando AJAX
			jQuery.ajax({
				type : 'POST',
				url : jQuery(this).attr('action'),
				data : jQuery(this).serialize(),
				// Mostramos un mensaje con la respuesta de PHP
				success : function(data) {
					jQuery('#result').html(data);
				}
			})
			return false;
		});
	})
</script> 
donde por php recibe el campo usuarios:

Código PHP:
$usuarios $_POST["usuarios"];
    
    for(
$i=0;$i<count($usuarios); $i++)
    {
        
$consulta2 $objUsuario->mostrar_usuario_participacion_22222($usuarios[$i]);
        
            while(
$resultado=mysql_fetch_object($consulta2))
            {                
                
$idsproyectos[$resultado->idProyecto]++;                
            }            
        
        
    } 
esto lo que hace es guardar los id proyectos y sumarle la cantidad de repeticiones por proyecto por cada usuario que recibo del checkbox
este llama al objeto usuario, a la funcion :

Código PHP:
function mostrar_usuario_participacion_22222($id) {
        if (
$this -> con -> conectar() == true) {

            
$sql = ("SELECT *
FROM proyecto_has_usuario pu
LEFT OUTER JOIN usuario u ON pu.Usuario_idUsuario = u.idUsuario
LEFT OUTER JOIN proyecto p ON pu.Proyecto_idProyecto = p.idProyecto
WHERE u.idUsuario = " 
$id "");

            
$resultado mysql_query($sql);

            if (!
$resultado) {
                die(
"Sql Invalido mostrar_usuario_participacion_22222 :" mysql_error());

            }
            return 
$resultado;

        }
    } 
lo que busca son los proyectos del usuario que envio en el for, aqui no hay problema me trae bien los datos.

ahora no si si lo estoy haciendo bien, pero sugiero ideas que me puedan inspirar para poder obtener los usuarios que estan en un proyecto, pero si me trae un usuario que no este no me muestre ningun dato por ejemplo en esta consulta:


Código PHP:
SELECT FROM proyecto_has_usuario pu
LEFT OUTER JOIN usuario u ON pu
.Usuario_idUsuario u.idUsuario
LEFT OUTER JOIN proyecto p ON pu
.Proyecto_idProyecto p.idProyecto
WHERE u
.idUsuario in (1,2GROUP BY pu.Proyecto_idProyecto HAVING COUNT(*) >= 
me trae los datos que el usuario 1 y 2 estan en los mismos proyectos pero si yo le pongo mas usuarios a esa consulta me sige tirando y arrojando mas proyectos por cada usuario q agrege, yo deseo que cuando haya un usuario 3 y no este en los mismo proyectos que 1 y 2 no me muestre ninguna informacion ya que no esta en el grupo de usuarios que estan dentro del proyecto. no se si me explique bien por favor si alguien me puede ayudar se lo agradeceria mucho!!!!!!!!!!!...


aqui tengo la funcion que me recibe el sql anterior:


Código PHP:
function mostrar_usuario_participacion_proyecto($id) {
        if (
$this -> con -> conectar() == true) {
            if (
count($id) == 1) {
                for (
$i 0$i count($id); $i++) {
                    
//echo $usuarios[$i];
                    
$sql = ("SELECT *
FROM proyecto_has_usuario pu
LEFT OUTER JOIN usuario u ON pu.Usuario_idUsuario = u.idUsuario
LEFT OUTER JOIN proyecto p ON pu.Proyecto_idProyecto = p.idProyecto
WHERE u.idUsuario = " 
$id[$i] . "");
                }
            } else {

                
//echo count($id);
                
$sql "SELECT * FROM proyecto_has_usuario pu
LEFT OUTER JOIN usuario u ON pu.Usuario_idUsuario = u.idUsuario
LEFT OUTER JOIN proyecto p ON pu.Proyecto_idProyecto = p.idProyecto
WHERE u.idUsuario in ("
;
                
$s 1;
                for (
$i 0$i count($id); $i++) {

                    
//echo count($id);
                    
if (count($id) == $s) {
                        
$sql .= "    " $id[$i] . ")";
                    } else {
                        
$sql .= "" $id[$i] . ",";
                    }

                    
$s++;
                }
                
$sql .= " GROUP BY pu.Proyecto_idProyecto HAVING COUNT(*) >= 2";

            }
            echo 
$sql;
            
$resultado mysql_query($sql);

            if (!
$resultado) {
                die(
"Sql Invalido mostrar_usuario_participacion_proyecto :" mysql_error());

            }
            return 
$resultado;

        }
    } 

por si me falta algo o si alguien por favor me puede ayudar ya que es urgente alguna idea :)
gracias
  #2 (permalink)  
Antiguo 15/11/2011, 15:00
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Consultar registros que no existan en otra tabla

Creo el problema es el LEFT OUTER JOIN, para que te muestre solo los proyectos de los usuarios 1 y 2, deberías de hacer un INNER JOIN, y una consulta sencilla como esta te debería de dar los resultados:
Código MySQL:
Ver original
  1. SELECT p.proyecto, u.nombre FROM proyecto p
  2. INNER JOIN proyecto_has_usuario pu ON pu.Proyecto_idProyecto = p.idProyecto
  3. INNER JOIN usuario u ON pu.Usuario_idUsuario = u.idUsuario
  4. WHERE u.idUsuario IN (1,2)

Saludos.
  #3 (permalink)  
Antiguo 15/11/2011, 15:07
 
Fecha de Ingreso: noviembre-2011
Mensajes: 8
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Consultar registros que no existan en otra tabla

Cita:
Iniciado por GatorV Ver Mensaje
Creo el problema es el LEFT OUTER JOIN, para que te muestre solo los proyectos de los usuarios 1 y 2, deberías de hacer un INNER JOIN, y una consulta sencilla como esta te debería de dar los resultados:
Código MySQL:
Ver original
  1. SELECT p.proyecto, u.nombre FROM proyecto p
  2. INNER JOIN proyecto_has_usuario pu ON pu.Proyecto_idProyecto = p.idProyecto
  3. INNER JOIN usuario u ON pu.Usuario_idUsuario = u.idUsuario
  4. WHERE u.idUsuario IN (1,2)

Saludos.


Gracias por el dato pero con el left si me los muestra, y el inner no me funciono como dices, lo que pasa es que necesito por ejemplo si el usuario 1 y 2 estan en un mismo proyecto y el usuario 3 no esta en el grupo seleccionado no me tiene q mostrar ningun dato, lo del inner y el left me muestran los mismo datos, de todas maneras gracias y si se puede otra idea te lo agradeceria.

saludos
  #4 (permalink)  
Antiguo 15/11/2011, 15:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Consultar registros que no existan en otra tabla

Te recomendaría que pongas tu esquema de tablas, y la consulta específica en el foro de Bases de Datos, te pueden ayudar más que aqui en el foro de PHP.
  #5 (permalink)  
Antiguo 16/11/2011, 07:49
 
Fecha de Ingreso: noviembre-2011
Mensajes: 8
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Consultar registros que no existan en otra tabla

Cita:
Iniciado por GatorV Ver Mensaje
Te recomendaría que pongas tu esquema de tablas, y la consulta específica en el foro de Bases de Datos, te pueden ayudar más que aqui en el foro de PHP.

Gracias por tu ayuda ya lo solucione habia que poner la cantidad de usuarios en el having count, y eso, de todas maneras gracias

Etiquetas: consultar, formulario, html, mysql, registros, sql, tabla, usuarios
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 18:47.