PHP - Entradas Repetidas en statement Echo

 
Vista:

Entradas Repetidas en statement Echo

Publicado por Ancient (5 intervenciones) el 28/09/2018 22:17:15
Hola gente,

Necesito ayuda con lo siguiente, tengo una tabla que estoy mostrando pero cada vez que hago una llamada me repite la entrada n cantidad de veces segun tenga en mi tabla, es decir, si tengo 12 entradas en la tabla fechas, por cada fecha que no consiga o que no exista en la lista me pone 12 valores de desconocido en mi pantalla, y no tiene limites si tengo 60 registros 60 veces me llena esa vista y no consigo dar con que estoy haciendo mal.

Para resumir un poco tengo una tabla de items y una tabla de fechas, la razon por la que estan separadas es porque cada item puede tener n cantidad de fechas (lotes) y necesito llamar la fecha mas reciente para identificar el ultimo lote en una lista por lo que deberia verse:

barcode producto fecha de lote mas reciente
p1x A 14/sep/2018
bhs B 19/ago/2018
765 C 17/sep/2018

mi tabla fechas tiene:
barcode fecha de lote (id clave primaria es numerica no visible)
p1x 12/may/2018 1
p1x 23/ago/2018 2
765 14/sep/2018 3
p1x 14/sep/2018 4
bhs 19/ago/2018 5
765 17/sep/2018 6

lo que estoy tratando de hacer es llamar la fecha mas reciente del producto x el cual identifico por el barcode, asi que estoy usando:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$lastlot = $row['barcode'];
 
$nofecha="Unknown";
 
$sql3 = "SELECT * FROM dates AS a WHERE date = ( SELECT MAX(date) FROM dates AS b WHERE a.bcfecha = b.bcfecha)";
 
$result2 = mysql_query($sql3);
 
while($row2 = mysql_fetch_array($result2) ) {
 
    if ($lastlot == $row2['bcfecha']){
 
        echo "<td align='center'> ".$row2['date']." </td>";
    }
    elseif($lastlot != $row2['bcfecha']){
 
        echo "<td align='center'> $nofecha </td>";
    }
}
}


con ese codigo siguiendo este ejemplo me salen 6 veces "Unknown" mas las fechas mas recientes de cada producto y no entiendo porque.

alguien puede ayudarme y darme guias en que estoy haciendo mal?

gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 729
Bronce
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Entradas Repetidas en statement Echo

Publicado por Gonzalo (615 intervenciones) el 29/09/2018 02:34:04
esta interesante el query

$sql3 = "SELECT * FROM dates AS a WHERE date = ( SELECT MAX(date) FROM dates AS b WHERE a.bcfecha = b.bcfecha)";

seleccionas de dates donde la fecha sea igual al maximo de date de esa misma tabla donde bcfecha = bcfecha ...

y donde esta el producto x en el query?

si necesitas la ultima fecha del producto x solo debes pedir el max de fecha donde producto es x.

select
max(date) as MaxDate
from dates
where barcode=x

con eso sacas la fecha mas reciente.

comentanos.

salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Entradas Repetidas en statement Echo

Publicado por Ancient (5 intervenciones) el 29/09/2018 02:56:02
El detalle Gonzalo es que yo no puedo escoger el barcode puesto que tengo al menos 1300 registros en esa tabla por eso los discierne con el barcode
Si el lastlot=barcode del producto entonces me los trae en la llamada por eso es que me tocó inventar el query asi (mis códigos son un tanto desastrosos cuando toca sacarlos de la caja)
El lastlot es = al barcode de los productos
El bcfecha es = al mismo barcode pero ubicado en la tabla de fechas

Intente hacer hace el where pero me da un error aún más inusual sólo me muestra la última entrada del lote con la fecha más reciente del penúltimo producto :/

Ya el lunes seguiré alborotando mis frustraciones y te pego el. Código
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 729
Bronce
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Entradas Repetidas en statement Echo

Publicado por Gonzalo (615 intervenciones) el 29/09/2018 04:02:51
ok, necesitas explicar mejor como esta estructurada cada tabla, despues necesitamos que aclares bien que es lo que necesitas hacer, con eso tenemos una mejor idea de como necesitas el query.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Entradas Repetidas en statement Echo

Publicado por Ancient (5 intervenciones) el 02/10/2018 00:11:42
Hola Gonzalo.

Las tablas estan muy simples. la tabla fechas tience la identificacion de todos los productos (barcode) y la fecha asociada a ese lote, es decir 1 producto puede tener n cantidad de fechas.

luego tengo mi tabla principal y es donde muestro todos los productos disponibles y otras caracteristicas pero solo quiero arreglar este detalle asi que diremos identificacion de todos los productos (el mismo barcode que identifica en fechas) lo que me tra el nombre, descripcion y mi problema la ultima fecha del ultimo lote registrado.

el problema radica en que no tengo idea como llamar a la ultima fecha o la fecha mas reciente de un producto, si ves la foto adjunta si se puede (tengo restricciones en el trabajo asi que no puedo registrar en este equipo por eso la puse en imgur:
https://imgur.com/a/Zar9Cod

la columna last batch deberia mostrarme la ultima fecha del lote, pero pega todas las entradas que hay en la tabla, tengo actualmente 5 fechas distintas en esa tabla de ejemplo, y pone 5 veces que no conoce la fecha, si pego el codigo en la tabla principal me salen los 3 mil registros y pone 3 mil veces que no conoce la fecha mas la fecha de ese producto :/

lo que estoy haciendo es:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$lastlot = $row['barcode'];
 
$nofecha="Unknown";
 
$sql3 = "SELECT * FROM dates AS a WHERE date = ( SELECT MAX(date) FROM dates AS b WHERE a.bcfecha = b.bcfecha)";
 
$result2 = mysql_query($sql3);
 
while($row2 = mysql_fetch_array($result2) ) {
 
    if ($lastlot == $row2['bcfecha']){
 
        echo "<td align='center'> ".$row2['date']." </td>";
    }
    elseif($lastlot != $row2['bcfecha']){
 
        echo "<td align='center'> $nofecha </td>";
    }
}
}

gracias de antemano
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 729
Bronce
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Entradas Repetidas en statement Echo

Publicado por Gonzalo (615 intervenciones) el 02/10/2018 01:24:45
buenos dias don Ancient.

me parece que el problema esta en el query, debes filtrar las fechas de ese producto ordenadas por fecha en decendente.

en la forma que lo estas haciendo estas usando la misma tabla, asi que no veo que encuentre el producto.

intenta con el query que te pase.

salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Entradas Repetidas en statement Echo

Publicado por Ancient (5 intervenciones) el 02/10/2018 17:27:39
Hola Gonzalo,

El producto lo encuentra lo que no hace es lo de la fecha mas reciente. con el query como lo propusiste me da el siguiente error:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in (ver ejemplo 2): https://imgur.com/a/u1B168a

El producto lo consigue porque fijate en el ejemplo 3:

1
2
3
4
5
6
7
8
9
10
11
12
13
$lastlot = $row['barcode'];
 
$sql3 = "SELECT * FROM dates AS a WHERE date = ( SELECT MAX(date) FROM dates AS b WHERE a.bcfecha = b.bcfecha)";
 
$result2 = mysql_query($sql3);
 
while($row2 = mysql_fetch_array($result2) ) {
 
    if ($lastlot == $row2['bcfecha']){
 
        echo "<td align='center'> ".$row2['dates']." </td>";
    }
}


las 5 fechas que tengo en ese ejemplo estan entre los 2 primeros productos, si hago el echo de la tabla fechas, agarra la mas reciente y hasta ahi esta bien, pero la etiqueta 6 no tiene fecha alguna, y como no existe fecha arruino todo cuando quiero poner que no existe fecha o que es desconocida, si ves el ejemplo 3 de muestra solo se come la columna y pone las opciones en el espacio de last lot.

la frustracion no tiene limites, de verdad siento que es una estupidez pero no logro dar con que estoy haciendo mal
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Entradas Repetidas en statement Echo

Publicado por Ancient (5 intervenciones) el 04/10/2018 22:33:50
Ok,

para quien sea que tenga un problema como este, me rendi asi que termine dando con una solucion poco ortodoxa pero funciono genial en mis 3mil registros,
termine metiendo en mi tabla principal la fecha maxima que ya se mostraba grabandolas en un campo nuevo que grabara las fechas nuevas cada vez que se haga una consulta, asi:

1
2
3
4
5
6
7
8
try {
    require("db.php");
    $stmt = $conn->prepare("UPDATE items SET dates='$datos' WHERE barcode='$b'");
    $stmt->execute();
}
catch (PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
}

no se todavia como resolver a grosso modo mi problema original pero esto me permite grabar cada cambio en la tabla principal para cada producto y siempre voy a tener la fecha mas reciente que era todo lo que queria, solo debo llamar ese campo nuevo en un echo y voila, problema resuelto sin 3mil iteraciones. Seguire revisando de todos modos a ver si alguien me da una respuesta sin tener que sobrecargar mas mi base de datos.

Gracias a gonzalo y a quienes hayan tratado de ayudar :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar