Foros del Web » Programando para Internet » PHP »

Dudas al listar datos relacionados

Estas en el tema de Dudas al listar datos relacionados en el foro de PHP en Foros del Web. Buenas, tengo algunos problemas a la hora de listar datos unicamente de un usuario y no de todos. El autentificador que uso es el de ...
  #1 (permalink)  
Antiguo 31/08/2006, 17:52
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 18 años, 3 meses
Puntos: 0
Pregunta Dudas al listar datos relacionados

Buenas, tengo algunos problemas a la hora de listar datos unicamente de un usuario y no de todos. El autentificador que uso es el de Cluster, ya que me parecio muy bueno.
Aqui les paso mi problema:

Tengo las siguientes tablas:
Código PHP:
CREATE TABLE avisos_inmobiliarios (
id_aviso_inm int(9NOT NULL auto_increment,
tipo varchar(60NOT NULL default '',
operacion varchar(60NOT NULL default '',
ubicacion varchar(60NOT NULL default '',
direccion varchar(60NOT NULL default '',
precio varchar(60NOT NULL default '',
foto01 varchar(60NOT NULL default '',
foto02 varchar(60NOT NULL default '',
foto03 varchar(60NOT NULL default '',
foto04 varchar(60NOT NULL default '',
aviso longtext NOT NULL,
fecha varchar(65NOT NULL default '',
nombre_inmobiliaria varchar(60NOT NULL,
PRIMARY KEY (id_aviso_inm)
);


CREATE TABLE inmobiliarias (
nombre_inmobiliaria varchar(60NOT NULL default '',
telefono varchar(60NOT NULL default '',
email varchar(60NOT NULL default '',
direccion varchar(60NOT NULL default '',
cuidad varchar(60NOT NULL default '',
banner varchar(60NOT NULL default '',
PRIMARY KEY (nombre_inmobiliaria)
);

CREATE TABLE usuario_inmobiliaria (
nombre_inmobiliaria varchar(60NOT NULL,
id_usuario smallint(6NOT NULL,
PRIMARY KEY (id_usuario)
);


CREATE TABLE usuarios (
  
ID smallint(6unsigned NOT NULL auto_increment,
  
usuario tinytext NOT NULL,
  
pass tinytext NOT NULL,
  
nivel_acceso smallint(4unsigned NOT NULL default '0',
  
PRIMARY KEY  (ID),
  
UNIQUE KEY ID (ID)
TYPE=MyISAM PACK_KEYS=1
Mi codigo es el siguiente:
Código PHP:
<?
include('aut_config.inc.php'); //incluimos el config.php que contiene los datos de la conexión a la db y la sesión
require ("aut_verifica.inc.php");
if(
$_SESSION['level'] == 1)
{
echo 
'Tienes level 1 y puedes ver esta página';
?>
<?
$host
="localhost";
$username="city45_user";
$password="city";
$db_name="city45_avisos";

mysql_connect("$host""$username""$password")or die("No se pudo conectar con el server");
mysql_select_db("$db_name")or die("No se pudo conectar con la base de datos");

$sql="SELECT nombre_inmobiliaria FROM usuario_inmobiliaria WHERE id_usuario='$_SESSION['usuario_id']'";
$result=mysql_query($sql);
while(
$rows=mysql_fetch_array($result))
$rows['nombre_inmobiliaria'];
$_SESSION['nombre_inmobiliaria'] = $rows['nombre_inmobiliaria']
$listar="SELECT * FROM avisos_inmoviliarios WHERE nombre_inmobiliaria='$_SESSION['nombre_inmobiliaria']'";
$result=mysql_query($listar);
while(
$rows=mysql_fetch_array($result)){
?>
<? 
echo $rows['tipo']; ?>
<? 
echo $rows['operacion']; ?>
<? 
echo $rows['ubicacion']; ?>
<? 
echo $rows['direccion']; ?>
<? 
echo $rows['precio']; ?>

<?
}
mysql_close(); //close database
?>
Muchas Gracias por su tiempo, espero poder dar con esto.
  #2 (permalink)  
Antiguo 31/08/2006, 18:05
 
Fecha de Ingreso: agosto-2006
Ubicación: Barcelona,España
Mensajes: 54
Antigüedad: 18 años, 2 meses
Puntos: 0
Nose si me equibocare pero esta parte del codigo creo que sobra o no le veo utilidad

Cita:
$_SESSION['nombre_inmobiliaria'] = $rows['nombre_inmobiliaria']
$listar="SELECT * FROM avisos_inmoviliarios WHERE nombre_inmobiliaria='$_SESSION['nombre_inmobiliaria']'";
$result=mysql_query($listar);
porque diria que hace la misma funcion que la de arriba, identificar ya identificas al usuario ya sea por su nombre o su ID, si ya lo tienes identificado por su ID para que hacer el mismo proceso pero con su Nombre?
  #3 (permalink)  
Antiguo 31/08/2006, 18:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
No entendì cual es tu problema concreto ..

Lo que corresponde a "Autentificator" .. Si tu ves el valor de tu variable de sesión que identifica el usuario en:

echo $_SESSION['usuario_id'];

"Autentificator" está trabajando correctamente.


Por lo demás .. usa concatenación para llamar a las variables en la consulta SQL:

Código PHP:
$sql="SELECT nombre_inmobiliaria FROM usuario_inmobiliaria WHERE id_usuario='".$_SESSION['usuario_id']."'"
(lo mismo con otras $_SESSION que usas en consultas SQL).


Otros detalles:
$_SESSION['nombre_inmobiliaria'] = $rows['nombre_inmobiliaria']


así como lo usas bajo un bucle (while()) no tiene sentido .. fijate que siempre sobre-escribes el valor de esa variable de sesión para que al final se quede con el último que quedó .. Si realmente ese resultado ha de arrojar un -sólo- resultado .. no uses un bucle while() ..

Tampoco entiendo tu "modelo de datos" BBDD y tablas que usas .. Deberías relacionar las tablas por sus "IDs" no por campos como "nombre" .. asì facilitarías consultas SQL donde intervengan todas las tablas relacionadas (y sólo una para obtener todos los datos!)

Por ejemplo .. a la tabla: inmobiliarias le harìa falta un campo autonumérico y único: id_inmobiliaria .. y este relacionarlo con el "aviso" por ese "ID" y no por el "nombre" como vas haciendo en todas las tablas .. eso no facilita para nada consultas SQL un poco màs "avanzadas".

Te recomendaría aclarar el "modelo de datos" en el foro de BBDD y por mientras leer un poco sobre "normalización":

http://www.mysql-hispano.org/page.php?id=16

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 31/08/2006, 19:19
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 18 años, 3 meses
Puntos: 0
Pregunta ...sigo

Muchas gracias por las respuestas.
Entiendo lo de la db, ya que es mejor relacionar por ID, pero estoy haciendo una prueba y me quedo mas como armarlo con el nombre de usuario.
Lo que busco hacer es que el usuario que se logue pueda ver unicamente sus datos (utilizando su nombre de usuario) y no todos los que estan en la tabla.
...ahora estoy en esto:
Código PHP:
<?
include('aut_config.inc.php'); //incluimos el config.php que contiene los datos de la conexión a la db y la sesión
require ("aut_verifica.inc.php");
if(
$_SESSION['level'] == 1)
{
echo 
'Tienes level 1 y puedes ver esta página';
?>
<?
$host
="localhost";
$username="city45_user";
$password="city";
$db_name="city45_avisos";

mysql_connect("$host""$username""$password")or die("No se pudo conectar con el server");
mysql_select_db("$db_name")or die("No se pudo conectar con la base de datos");
$sql="SELECT nombre_inmobiliaria FROM usuario_inmobiliaria WHERE id_usuario='".$_SESSION['usuario_id']."'"

$result=mysql_query($sql);
$rows=mysql_fetch_array($result)
$rows['nombre_inmobiliaria'];
$_SESSION['nombre_inmobiliaria'] = $rows['nombre_inmobiliaria']
$listar="SELECT * FROM avisos_inmobiliarios WHERE nombre_inmobiliaria='".$_SESSION['nombre_inmobiliaria']."'";
$result=mysql_query($listar);
while(
$rows=mysql_fetch_array($result)){
?>
<? 
echo $rows['tipo']; ?>
<? 
echo $rows['operacion']; ?>
<? 
echo $rows['ubicacion']; ?>
<? 
echo $rows['direccion']; ?>
<? 
echo $rows['precio']; ?>

<?
}
mysql_close(); //close database
?>
  #5 (permalink)  
Antiguo 31/08/2006, 20:39
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 18 años, 3 meses
Puntos: 0
Pregunta el autentificador anda joya

Cluster, el autentificador anda joya, el que anda mal soy yo es por eso que pedia ayuda.
Gracias
  #6 (permalink)  
Antiguo 31/08/2006, 21:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
OK, pero ya te he comentado y/o preguntado sobre algo que haces tu en el código que no entiendo su significado ..

Tampoco sé de las N tablas que usas (y sus relaciones) que datos deseas obtener de ellas (que campos de que tablas bajo que criterio). Esto es necesario definirlo para ver la sentencia SQL a ejecuar (deberías consultarlo en el foro de "BBDD") .. Tu ya sabes donde (y ahora como) tomar el "usuario activo" (por ID o nombre o lo que uses) en la variable de sesión destinada para tal fin (y que crea/gestiona ya "Autentificator").

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 31/08/2006, 21:46
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 18 años, 3 meses
Puntos: 0
..joya!

Cluster, gracias, voy a chekear bien los de las db.
Otra consulta mas, como hago para no hacer un while ya que yo quiero un solo resultado.
Estos serian los pasos de lo que voy haciendo
1- Cuando se loguea el usuario en pag1_restringido:

Código PHP:
"SELECT nombre_inmobiliaria FROM usuario_inmobiliaria WHERE id_usuario='$_SESSION['usuario_id']'"
2- Ejecuto esta consulta y recuperas el nombre de la inmobiliaria
Código PHP:
$rows['nombre_inmobiliaria'
3- Para tenerlo durante toda la secion
Código PHP:
$_SESSION['nombre_inmobiliaria']= $rows['nombre_inmobiliaria'
4- Con esta consulta listo todos los avisos que corresponden a la inmobiliaria del usuario
Código PHP:
 "SELECT * FROM avisos_inmoviliarios WHERE nombre_inmobiliaria='$_SESSION['nombre_inmobiliaria']'"
Muchas gracias, ya te debo volver loco..disculpas
  #8 (permalink)  
Antiguo 31/08/2006, 21:53
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Cita:
Iniciado por Spychaser Ver Mensaje
Cluster, gracias, voy a chekear bien los de las db.
Otra consulta mas, como hago para no hacer un while ya que yo quiero un solo resultado.
Estos serian los pasos de lo que voy haciendo
1- Cuando se loguea el usuario en pag1_restringido:

Código PHP:
"SELECT nombre_inmobiliaria FROM usuario_inmobiliaria WHERE id_usuario='$_SESSION['usuario_id']'"
2- Ejecuto esta consulta y recuperas el nombre de la inmobiliaria
Código PHP:
$rows['nombre_inmobiliaria'
3- Para tenerlo durante toda la secion
Código PHP:
$_SESSION['nombre_inmobiliaria']= $rows['nombre_inmobiliaria'
4- Con esta consulta listo todos los avisos que corresponden a la inmobiliaria del usuario
Código PHP:
 "SELECT * FROM avisos_inmoviliarios WHERE nombre_inmobiliaria='$_SESSION['nombre_inmobiliaria']'"
Muchas gracias, ya te debo volver loco..disculpas
mm realmente el tema no deberìas tratarlo así .. con la creaciòn de una sesiòn por médio sino en una consulta SQL que llame a las dos tablas y obtenga los resultados que necesitas:

Código PHP:
SELECT *.avisos_inmoviliarios FROM usuario_inmobiliaria,avisos_inmoviliarios  WHERE usuario_inmobiliaria.id_usuario='".$_SESSION['usuario_id']."' AND usuario_inmobiliaria.nombre_inmobiliaria avisos_inmoviliarios.nombre_inmobiliaria "; 
Si te fijas .. sòlo necesito el usuario para mostrar sus datos relacionados .. Se "iguala": usuario_inmobiliaria.nombre_inmobiliaria = avisos_inmoviliarios.nombre_inmobiliaria por qué esa es tu "clave foránea" .. el campo en ambas tablas que es igual. OJO con esto .. por eso te decía que eso se hace bajo "ID's" para evitar errores tipo "en una tabla pusistes como nombre una cosa y en la otra no lo mismo).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 31/08/2006, 23:05
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 18 años, 3 meses
Puntos: 0
joya!

Cluster.
Muy bueno lo del select que posteaste, pero me lo podrias explicar un poco, soy medio de madera.
Te hago una consulta mas, luego de hacer el select, como sigo, ya que siempre uso estas sentencias. Supuestamente ese select me tendria que listar la informacion de mi usuario que esta alamacenada en una tabla junto con la informacion de otros usuarios.

Esto es lo que uso siempre despues del select:
Código PHP:
$sql="SELECT .....
$result=mysql_query($sql);
            while($rows=mysql_fetch_array($result)){
            ?>
            <? echo $rows['aviso']; ?>
            
            
            
            <?
}
mysql_close(); //close database
?>
  #10 (permalink)  
Antiguo 01/09/2006, 06:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Según la sentencia SQL que te indiqué .. en $rows['nombre_campo'] de las tablas implicadas (su nombres) tendrás los resultados.

En mi ejemplo anterior (SQL) se me pasó incluir los campos de la tabla "usuarios_inmobiliaria" para que los tengas accesibles.

Lo mejor es que tomes esta sentencia SQL .. pongas un dato de ejemplo (ID usaurio) y la ejecutes en phpMyadmin o el GUI para Mysql que uses .. así compruebas si los resultados arrojados son los que esperas. Cuando tengas "refinada" la sentencia SQL .. ahí la procesas con PHP como necesites.

Código PHP:
SELECT *.avisos_inmoviliarios,*.usuario_inmobiliaria FROM usuario_inmobiliaria,avisos_inmoviliarios  WHERE usuario_inmobiliaria.id_usuario='".$_SESSION['usuario_id']."' AND usuario_inmobiliaria.nombre_inmobiliaria avisos_inmoviliarios.nombre_inmobiliaria "; 
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 01/09/2006, 06:50
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 18 años, 3 meses
Puntos: 0
Pregunta mysql_fetch_array()

Buenas, escribo porque al ejecutar una consulta, me sale el siguiente error:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/city45/public_html/usuariosinmobiliarias.php on line 141

Lo que hago es lo siguiente:
Código PHP:
$sql="SELECT * avisos_inmobiliarios.aviso FROM usuario_inmobiliaria,avisos_inmobiliarios  WHERE usuario_inmobiliaria.id_usuario='".$_SESSION['usuario_id']."' AND usuario_inmobiliaria.nombre_inmobiliaria = avisos_inmoviliarios.nombre_inmobiliaria";
$result=mysql_query($sql);
while(
$rows=mysql_fetch_array($result)){ 
Nose como no sacar ese while.
Muchas gracias
  #12 (permalink)  
Antiguo 01/09/2006, 07:01
Avatar de jmqc  
Fecha de Ingreso: noviembre-2004
Ubicación: Venezuela
Mensajes: 353
Antigüedad: 20 años
Puntos: 1
Que tal, estas conectado a la base de datos?, esta esa tabla en tu bd?, ese campo existe en la tabla?, la cosulta esta bien? son esos datos que puedes buscar?, los campos de las diferentes tablas son iguales? hay varias cosas que tienes que revisar antes de plantearnos.. Espero que te sirva, cualquier cosa aqui estamos... Saludos
__________________
Ante el desconocimiento ni entendimiento de las cosas decimos que los demás estan locos.

José Quintero. Saludos.
:adios:
  #13 (permalink)  
Antiguo 01/09/2006, 07:05
Avatar de fermar21  
Fecha de Ingreso: marzo-2004
Ubicación: San Nicolas - Bs. As.
Mensajes: 294
Antigüedad: 20 años, 7 meses
Puntos: 0
Hola,

Me parece que el error esta en el query SELECT.... pero no se bien donde. Todo lo demas esta bien.
Revisalo, ve haciendo prueba y error.

Saludos
__________________
Fernando Marinzulich
Programador Web (PHP/MySQL/Jquery)
  #14 (permalink)  
Antiguo 01/09/2006, 07:07
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 18 años, 3 meses
Puntos: 0
Pregunta detallo

Si la conexion y los campos estan bien, pero el problema lo tengo en el while ese creo. Aca va mi codigo:

Código PHP:
<?
            $host
="localhost";
$username="city45_user";
$password="city";
$db_name="city45_avisos";
mysql_connect("$host""$username""$password")or die("No se pudo conectar con el server");
mysql_select_db("$db_name")or die("No se pudo conectar con la tabla");

$sql="SELECT * avisos_inmobiliarios.aviso FROM usuario_inmobiliaria,avisos_inmobiliarios  WHERE usuario_inmobiliaria.nombre_inmobiliaria='".$_SESSION['usuario_id']."' AND usuario_inmobiliaria.nombre_inmobiliaria = avisos_inmobiliarios.nombre_inmobiliaria";
$result=mysql_query($sql);
while(
$rows=mysql_fetch_array($result)){
?>
    <? echo $rows['aviso']; ?>
            
            
            
<?
}
mysql_close(); //close database
?>
  #15 (permalink)  
Antiguo 01/09/2006, 07:54
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 18 años, 3 meses
Puntos: 0
De acuerdo solucionado, pero....

Tenia un error en el SELECT, igualmente ahora no me arroja error, no arroja nada.... es una lucha!

$sql="SELECT avisos_inmobiliarios.aviso FROM usuario_inmobiliaria, avisos_inmobiliarios WHERE usuario_inmobiliaria.nombre_inmobiliaria='".$_SESS ION['usuario_id']."' AND usuario_inmobiliaria.nombre_inmobiliaria = avisos_inmobiliarios.nombre_inmobiliaria";

Muchas gracias
  #16 (permalink)  
Antiguo 01/09/2006, 11:10
Avatar de B**
B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Antigüedad: 18 años, 10 meses
Puntos: 3
Creo que el error esta por que al usar alias no le especificas de que tablas estas haciendo.. vaya .. el alias..
Como un tip... cuando usas alias.... primero se pone el nombre de la tabla. nombre del campo
Este es un ejemplo correcto de uso de un alias
Código PHP:
$sql="SELECT avisos_inmobiliarios.aviso FROM nombre_tabla  as avisos_inmobiliarios" 
Saludos!!
__________________
-URL= Go PHP5.
-Age=22.
-Learning=PHP,J2EE,Struts,MAMBO,C++,JSON,AJAX,XHTML ,CSS.
  #17 (permalink)  
Antiguo 01/09/2006, 11:31
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Spychaser

Por favor .. no repitas los mensajes, así se pierde el hilo de tu mensaje y obligas a la gente a decirte tal vez cosas que ya has visto o propuestas que ya has visto con la consiguiente perdida de tiempo para tí y para el que te intentó ayudar.
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #18 (permalink)  
Antiguo 01/09/2006, 11:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Usa mysql_errro() para identificar problemas con SQL:

Código PHP:
$result=mysql_query($sql) or die (mysql_error()); 
Y te recomiendo que ejecutes tus consultas SQL en algún GUI de Mysql ... phpMyadmin o lo que uses .. así pruebas tus consultas SQL y no tendrás dudas si el problema es de SQL o bien es de PHP (de como extraes los datos del resultado devuelto).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 12:13.