Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

consulta con 2 tablas

Estas en el tema de consulta con 2 tablas en el foro de Mysql en Foros del Web. Buenas tengo dos tablas y tengo que hacer una consulta del siguiente tipo select * from usuarios (aki tambien necesitaria poner la de amigos) where ...
  #1 (permalink)  
Antiguo 25/07/2012, 14:47
 
Fecha de Ingreso: noviembre-2011
Mensajes: 516
Antigüedad: 12 años, 4 meses
Puntos: 10
consulta con 2 tablas

Buenas
tengo dos tablas y tengo que hacer una consulta del siguiente tipo
select * from usuarios (aki tambien necesitaria poner la de amigos) where id='$id_usuario' and id_amigo='$id_amigo'
es decir un dato es de una tabla y el otro sale de la otra tabla como puedo conseguir esto??? es que no se como hacer tal consulta. un saludo.
  #2 (permalink)  
Antiguo 26/07/2012, 01:33
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: consulta con 2 tablas

Sintaxis de JOIN

13.2.8.2. JOIN Syntax
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 26/07/2012, 03:42
 
Fecha de Ingreso: noviembre-2011
Mensajes: 516
Antigüedad: 12 años, 4 meses
Puntos: 10
Respuesta: consulta con 2 tablas

Vi lo que me dijiste y cree lo siguiente pero no me funciona yo lo unico que necesito es un dato para el where pero nose que hice mal, esto es lo que tengo aora:
Código PHP:
Ver original
  1. <?php
  2.  
  3. include("config.php");
  4.  
  5. $registros=mysql_query("SELECT *
  6. FROM usuarios, amigos
  7. WHERE usuarios.id=amigos.id_logueado",$conexion);
  8. while($row=mysql_fetch_assoc($registros))
  9. {
  10.     $row['id'];
  11. }
  12. ?>
Espero me puedan echar una mano.Gracias.
  #4 (permalink)  
Antiguo 27/07/2012, 02:42
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: consulta con 2 tablas

SELECT * FROM usuarios INNER JOIN amigos ON usuarios.id=amigos.id_logueado;

Esto da todos los campos de las tablas usuarios y amigos emparejando por id y id_loguedo respectivamente. Es lo mismo que has puesto tu pero usando la sintaxis de join que es mas actual.

No explicas que es lo que quieres ni que error te da o porque dices que no te funciona.... para poderte ayudar deberias mostrar la estructura dela tablas, darnos un grupo de datos coherente de cada tabla y el resultado que esperas obtener....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 27/07/2012, 03:57
 
Fecha de Ingreso: noviembre-2011
Mensajes: 516
Antigüedad: 12 años, 4 meses
Puntos: 10
Respuesta: consulta con 2 tablas

Mira quiero hacer una consulta del siguiente tipo select * from usuarios where estado!='3'
Mi problema que el estado se encuentra en otra tabla estas son mis tablas de datos:
Código MySQL:
Ver original
  1. CREATE TABLE `usuarios` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `email` varchar(32) NOT NULL DEFAULT '',
  4.   `password` varchar(40) NOT NULL DEFAULT '',
  5.   `nombre` varchar(40) NOT NULL DEFAULT '',
  6.   `nacimiento` date NOT NULL DEFAULT '0000-00-00',
  7.   `sexo` varchar(10) NOT NULL,
  8.   `imagen` text NOT NULL,
  9.   PRIMARY KEY (`id`),
  10.   UNIQUE KEY `email` (`email`)
  11. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;
y aqui es donde esta el estado:
Código MySQL:
Ver original
  1. CREATE TABLE `amigos` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `id_logueado` varchar(30) COLLATE latin1_general_ci NOT NULL,
  4.   `id_amigo` varchar(30) COLLATE latin1_general_ci NOT NULL,
  5.   `estado` varchar(30) COLLATE latin1_general_ci NOT NULL,
  6.   PRIMARY KEY (`id`)
  7. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=5 ;
Lo e intentado hacer como me dijiste de esta forma:
Código PHP:
Ver original
  1. <?php
  2.  
  3. include("config.php");
  4.  
  5. $registros=mysql_query("SELECT *
  6. FROM usuarios inner join amigos
  7. on usuarios.id!='1' and amigos.estado!='2'",$conexion);
  8. while($row=mysql_fetch_assoc($registros))
  9. {
  10.     ?><img src="<?php echo $row['imagen'];?>" /><?php echo $row['nombre'];"<br>";
  11. }
  12. ?>
Pero me salen 3 veces el mismo registro hay forma de que esto no pase???
Se puede hacer lo que yo digo o hay que acerlo de otra forma??? un saludo y gracias.

Última edición por edie8; 27/07/2012 a las 04:12
  #6 (permalink)  
Antiguo 27/07/2012, 04:38
Avatar de gran Wakka  
Fecha de Ingreso: septiembre-2007
Mensajes: 712
Antigüedad: 16 años, 7 meses
Puntos: 48
Respuesta: consulta con 2 tablas

Código PHP:
    <?php
     
    
include("config.php");
     
    
$registros=mysql_query("SELECT *
    FROM usuarios inner join amigos
    on usuarios.id=amigos.id_logueado and usuarios.id!='1' and amigos.estado!='2'"
,$conexion);
    while(
$row=mysql_fetch_assoc($registros))
    {
        
?><img src="<?php echo $row['imagen'];?>" /><?php echo $row['nombre'];"<br>";
    }
    
?>
En la parte del ON, añade usuarios.id=amigos.id_logueado a las otras dos condiciones que has puesto.
__________________
Información de Series de TV
Buscas o quieres ser redactor? Ofertas redactor web
  #7 (permalink)  
Antiguo 27/07/2012, 05:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: consulta con 2 tablas

Código MySQL:
Ver original
  1. SELECT * FROM usuarios inner join amigos ON usuarios.id=amigos.id_logueado
  2. WHERE usuarios.id!='1' and amigos.estado!='2'
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #8 (permalink)  
Antiguo 27/07/2012, 05:43
 
Fecha de Ingreso: noviembre-2011
Mensajes: 516
Antigüedad: 12 años, 4 meses
Puntos: 10
Respuesta: consulta con 2 tablas

he puesto ese codigo que mas dao y no me funciona nose que ago mal pero asi no me da nada ningun resultado ni error:
<?php

include("config.php");

$registros=mysql_query("SELECT * FROM usuarios INNER JOIN amigos ON usuarios.id=amigos.id_logueado
WHERE usuarios.id!='1' AND amigos.estado!='2'",$conexion);
while($row=mysql_fetch_assoc($registros))
{
?><img src="<?php echo $row['imagen'];?>" /><?php echo $row['nombre'];"<br>";
}
?>

y registros si hay.
  #9 (permalink)  
Antiguo 27/07/2012, 06:20
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: consulta con 2 tablas

Si no te da error, el codigo está bien.
Si no te da resultados, es que no hay ningún registro que cumpla con las condiciones que pones:
Código MySQL:
Ver original
  1.     usuarios U
  2.     INNER JOIN amigos A ON U.id = A.id_logueado
  3.     U.id!='1'
  4.     AND
  5.     A.estado!='2'
Esto le pide a MySQL que devuelva aquellos registros donde el ID de USUARIOS sea diferente de 1, y donde el ESTADO en AMIGOS sea diferente de 2.
¿Eso es lo que buscas?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 27/07/2012, 07:08
 
Fecha de Ingreso: noviembre-2011
Mensajes: 516
Antigüedad: 12 años, 4 meses
Puntos: 10
Respuesta: consulta con 2 tablas

Ya consegui que funcione gracias a vosotros pero ahora tengo otro problema como era de esperar, si no hay registro en la base de datos de amigos no me saca al usuario, y yo lo que quiero conseguir es que si le tengo con el estado 2 no me salga ese usuario pero si no hay registro si como puedo acer tal cosa?? un saludo gracias x la ayuda.

Última edición por edie8; 27/07/2012 a las 08:08
  #11 (permalink)  
Antiguo 27/07/2012, 08:14
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: consulta con 2 tablas

Según lo que describes de las tablas, y los datos de ejemplo que estás poniendo tienes tres problemas:
1) El modelo de datos es inconsistente. Estás relacionando un campo numérico (ID en Usuario) con un campo VARCHAR (id_logueado en Amigos). Aún cuando los datos sean los mismos, pueden darse errores por las conversiones implícitas de MySQL.
2) Si lo que quieres es establecer relaciones de FK, estás usando el motor de tablas incorrecto. MyISAM no tiene restricciones de FK, por lo que la consistencia se debe lograr por programación, y no en la base.
3) No tienes datos que cumplan las condiciones que propones. Lo que buscas es que el estado sea diferente de 2 y que al mismo tiempo el id_logueado sea diferente de 1. En tus datos de ejemplo no hay ningún registro así.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: tabla, tablas, 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 04:01.