Comunidad de diseño web y desarrollo en internet online

consultas dentro de un bucle while

Citar            
MensajeEscrito el 21 Dic 2010 05:17 pm
:) Hola, muy buenas.
Estoy tratando de dar con el error que debo estar cometiendo al hacer una consulta a una base de datos.
Tengo una variable $password dada que recogo de una variable de sesión.
Quiero hacer varias consultas (a unan misma tabla)dentro de un bucle while, para finalmente imprimir solo los valores que cumplen con ciertos requisitos. El problema es que solo me devuelve un valor, como si sólo recorriera el bucle una vez. Este es el código(puedo explicarlo mejor si es necesario:)):

Código PHP :


... 
$conexion=.. 
.. 
SELECT distinct* FROM  tabla WHERE  passwordcliente='$password'...//transacciones donde el usuario ha sido cliente 
.. 
while($reg=... 
{ 
$passwordproveedor=$reg['passwordproveedor']; 
$emisor=$reg['emisor']; 
$conexion=.. 
.. 
SELECT MAX(time) AS maximo FROM tabla WHERE passwordcliente='$password' AND passwordproveedor='$passwordproveedor'..*/busco la ultima vez y tiempo en que yo fui cliente de dicho(cada) proveedor*/ 
.. 
if($reg=... 
{ 
$maximo1=$reg['maximo']; 
} 
SELECT MAX.......WHERE passwordcliente='$passwordproveedor' AND passwordproveedor='$password'...*/aquí el usuario es proveedor y el que antes era proveedor ahora es cliente;y recogo el momento de la ultima transaccion de este tipo*/ 
.. 
if($reg=.. 
{ 
$maximo2=$reg[' maximo']; 
} 
if($maximo1=$maximo2) 
{ 
echo $emisor; 
echo "<br />"; 
} 
}  

He tratado también de poner un número diferente a cada consulta, pero no ha funcionado.
Muchísimas gracias de antemano por cualquier ayuda.
:)

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

msie8
Citar            
MensajeEscrito el 21 Dic 2010 05:25 pm
perdón!, quería decir:"recojo", :)

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

msie8
Citar            
MensajeEscrito el 21 Dic 2010 05:44 pm
mm no comprendo lo de los puntos y e smuy dificil hallar el problema

Código PHP :

if($reg=..  

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Dic 2010 06:47 pm
plantea correctamente tu pregunta, estoy seguro que eso se puede resolver sin bucles en php, solo con una consulta SQL bien echa

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 22 Dic 2010 04:44 pm
Gracias por responder.

La verdad es que me encantaría poder resolverlo con bucles porque cuando se me ocurrió me pareció que seguía bien la lógica de mi problema. Yo no los domino,ni mucho menos, entonces no puedo saber si realmente se puede hacer así; de hecho, es obvio que de momento no funciona. Bueno, planteo mejor el problema, cualquier idea es super bienvenida, aunque no sea utilizando bucles.

Tengo una tabla de datos en la que se registran transacciones. Para cada transacción( que se corresponde con un campo) hay un proveedor(con su contraseña, passwordproveedor) y un cliente(contraseña, passwordcliente), también con sus campos.A cada registro o transacción le corresponde un tiempo(campo time).
Una misma persona puede ser proveedor en una transacción y cliente en otra.(Esta es la mayor particularidad.)
Cuando el usuario entar en la página web se recoge su contraseña. (La tengo en otra tabla, como password).
Lo que busco, es decirle a dicho usuario, qué proveedores ha tenido(sólo proveedores, no clientes), hasta la fecha; pero sólo aquellos cuya última transacción con él(lo veo en el campo time) ha sido posterior a la última transacción con él en la que él ha sido cliente y yo proveedor( en caso de que no se haya dado esta circunstancia también los incluyo).

tabla. Campos: passwordcliente | passwordproveedor | producto | time


p.s: if($reg=mysql_fetch_array($registros))
{..
(igual con while($reg=...))

:)

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

msie8
Citar            
MensajeEscrito el 23 Dic 2010 11:41 am
Tienes un error de diseño en la base de datos. El dato password no puede ser un identificador unívoco para una persona porque no es invariante (¿qué pasa si la persona cambia su password?).

Debes tener al menos dos tablas. Una de "personas" que tendría esta estructura:

ID | Nombre | Apellido | username | password | resto de los campos...

El campo clave primaria es ID

Y la tabla "transacción"

NroTransaccion | ID_cliente | ID_proveedor | tiempo | producto.

El campo clave primaria es NroTransaccion y alternativamente una clave compuesta ID_cliente + ID_proveedor con repetición.

Con este diseño, a la pregunta "¿Cuáles son las transacciones donde la persona 1 ha sido cliente?".

Código MySQL :

SELECT * FROM transacciones WHERE ID_cliente = 1 ORDER BY tiempo DESC;


A la pregunta "¿Cuáles son las transacciones donde la persona 1 ha sido cliente y la 2 proveedor?".

Código MySQL :

SELECT * FROM transacciones WHERE (ID_cliente = 1) AND (ID_proveedor = 2) ORDER BY tiempo DESC;

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 23 Dic 2010 01:16 pm

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 23 Dic 2010 06:04 pm
Hola!

Muchas gracias por vuestras respuestas.

DriverOp, seguramente tienes razón y utilizar el campo ID es más sencillo y/o directo que el campo password. De todas maneras tal y como yo lo tengo al final es igual, ya que cada vez que alguien cambia su contraseña en la primera tabla(perdona, seguramente no he especificado que tengo dos tablas), hago una consulta para cambiarla también en la otra( tanto passwordproveedor como passwordcliente) de manera automática.
Luego lo que busco son proveedores más que transacciones en sí. Pero no todos los proveedores del usuario, si no sólo aquellos cuya última transacción con el usuario ha sido posterior a la última( si es que la ha habido) transacción con el mismo usuario pero intercambiando los roles, es decir, él siendo cliente y el usuario proveedor.

La verdad es yo también creo que no debe ser muy compliacado codificarlo, pero yo no doy con el/los script/s necesario/s.
Voy a consultar tu enlace Inyaca.
Gracias de nuevo.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

msie8
Citar            
MensajeEscrito el 23 Dic 2010 09:58 pm
He estado consultando el link acerca de las consultas con JOIN, y no veo la manera de aplicarlo a mi caso. Eso sí, se agradece, y seguro que los utilizaré más adelante.

Se me ha ocurrido que para lo que yo busco debe haber una manera de poner todos los selects dentro de una consulta. A mí se me ha ocurrido algo así. Me lo he medio inventado, o sea que estará mal, pero algo me dice que debe haber algo parecido.
He daso un nombre a la primera variable que busco para poder seguir usando los mismos valores en el resto de consultas.

Código PHP :

$include(..); 
$registros=mysql_query("SELECT passwordemisor AS pass where (SELECT(MAX(time) from tabla where passwordemisor=pass AND passwordreceptor=$password))>(SELECT(MAX(time)from tabla where passwordemisor=$password AND passwordreceptor=pass)) 
while ($reg=mysql_fetch_array.. 
{  


Un saludo

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

msie8
Citar            
MensajeEscrito el 24 Dic 2010 11:50 am
De todas maneras tal y como yo lo tengo al final es igual, ya que cada vez que alguien cambia su contraseña en la primera tabla...


Cinco años de universidad tirados a la basura...

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 24 Dic 2010 01:21 pm
breaststroke ok, es vispera de navidad, muestranos cuales son tus tablas
con el siguiente formato
[h2]nombre_tabla[/h2]
[list]
[*] campo_1
[*] campo_2
[*] campo_3
[*] campo_4
[/list]


o si tienes una version reciente de phpmyadmin anda a la pestaña "diseñador" sacas un pantallazo y nos muestras tu modelo



tienes un serio problema con el modelamiento de tu DB

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 25 Dic 2010 06:19 pm
Hola de nuevo y feliz Navidad!
Driver Op, no sé porqué dices eso. Entiendo lo que me decías del identificador; pero para la tabla que tengo me vale usuar password también, ¿no?, siempre y cuando modifique los passwordemisor y passwordreceptor cada vez que cambie el password.
A mi me parece que la solución es la misma, a efectos de lo que luego busco. Si me equivoco dímelo por favor( mis conocimientos son limitados).
Gracias Inyaka, por seguir pendiente de este tema. Puede queno se componga muchas veces una tabla de la manera que yo lo he hecho, y por eso puede parecer que está mal hecha. Seguro que la podía haber hecho mejor, en cualquier caso.
Me da mucha rabia no encontrar la solución de una de las maneras que lo he intentado( y aún pienso que se podría), pero he encontrado otra.
Añado un nuevo campo a la tabla. De esta manera cada vez que hay una operación o transacción se le da un valor si el proveedor ha sido previamente cliente del que ahora es cliente. Así siempre podré consultar los proveedores cuya última transacción como clientes( si es que la ha habido) ha sido anterior.
Bueno estoy seguro de que no he consigo explicarme muy bien desde el principio; y si uno a eso mis limitados conocimientos, pues....
Pero ya está. Aunque todavía queda probarlo, jeje. Gracias de nuevo.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

msie8
Citar            
MensajeEscrito el 26 Dic 2010 04:24 am

breaststroke escribió:

Driver Op, no sé porqué dices eso. Entiendo lo que me decías del identificador; pero para la tabla que tengo me vale usuar password también, ¿no?

No.

breaststroke escribió:

, siempre y cuando modifique los passwordemisor y passwordreceptor cada vez que cambie el password.

Lo cual es incorrecto, como ya he dicho.

breaststroke escribió:

A mi me parece que la solución es la misma, a efectos de lo que luego busco. Si me equivoco dímelo por favor( mis conocimientos son limitados).

Te parece mal. Estás violando la unicidad de las claves, lo cual a su vez viola la primera forma normal de las bases de datos. Y estás violando la dependencia única de la clave, segunda forma normal.

Como te niegas a mostrarnos la estructura de la base de datos, será muy difícil ayudarte.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 26 Dic 2010 06:16 pm
DriverOp ¿ves lo que se siente cuando se ponen porfiados? XD

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 26 Dic 2010 07:07 pm
Hola.

Os he agradecido todo lo que he podido vuestra ayuda. He sido todo lo claro que he podido ser al exponer mi problema.
No me he negado a nada!
Y al final lo he resuelto de otro modo, como ya he dicho. Me quedo con los consejos que me habeis dado, aunque no lo creais.
Mil saludos(que nunca están de más).

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

msie8
Citar            
MensajeEscrito el 26 Dic 2010 07:24 pm
breaststroke, la cosa es que tu DB tiene problemas de diseño,esta evidentemente mal estructurada, tiene problemas de normalización y algunos de simple logica,por eso DriverOp se molesta un poco.

bienvenido a clab, aca todos somos algo cascarrabias, pero en el fondo (muy en el fondo) somos buenas personas ;)

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 27 Dic 2010 12:43 pm

Inyaka escribió:

DriverOp ¿ves lo que se siente cuando se ponen porfiados? XD

Ya veo, ya veo... :cry:

Por DriverOp

Claber

2510 de clabLevel



 

opera

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.