Foros del Web » Programando para Internet » PHP »

no se estructurar una consulta mysql

Estas en el tema de no se estructurar una consulta mysql en el foro de PHP en Foros del Web. Buenas a todos. Tengo un problema con como montar una idea surgida a partir de una hoja excel. Yo creia que montar algo parecido en ...
  #1 (permalink)  
Antiguo 17/01/2012, 05:18
 
Fecha de Ingreso: enero-2007
Mensajes: 4
Antigüedad: 17 años, 10 meses
Puntos: 0
no se estructurar una consulta mysql

Buenas a todos. Tengo un problema con como montar una idea surgida a partir de una hoja excel. Yo creia que montar algo parecido en php no seria tan dificil, y no debe de serlo con conocimientos, y los mios... son basicos.

Tengo una amiga que necesita apuntar cada dia los importes diarios para luego conseguir objetivos y para comparar las ventas con otros años. Lo hace en una libreta!!!! Yo le dije que lo hiciera en una hoja excel, pero me dijo ke empezo a hacerlo pero el tener ke esperar a llegar a casa y conectar el ordenador... uff, ke mucho rollo. Entonces le dije ke le haria algo a traves de web para ke lo usara por el mobil.

Lo que he montado ha sido lo siguiente:




Con este codigo obtengo la fecha del dia que estamos y tengo el idfecha del lunes y toda la semana:
<?PHP
$diasemana=date("w");

if ( $diasemana == "1" )
{
$lunes= date("dmy");
for ($i=0; $i<7; $i++)
{
$data[] = date("dmy", strtotime("$lunes + $i days"));
}
} else {
for ($i=0; $i<7; $i++) {
$data[] = date("dmy", strtotime("last monday + $i days"));
}
$lunes=$data[0];
}

$martes=$data[1];
$miercoles=$data[2];
$jueves=$data[3];
$viernes=$data[4];
$sabado=$data[5];
$domingo=$data[6];
?>

Ahora biene cuando me pierdo, las consultas mysql para obtener las id de cada idfecha, pues creo ke he de abrir y cerrar y cada consulta porque son registros distintos. Lo que hago para obtener la id del lunes es lo siguiente:

<?php
$bd=mysql_connect("localhost", "root", "");
mysql_select_db("dias",$bd) OR DIE ("Error: Imposible Conectar a la tabla");
$sql = "select id from Dias where idfecha=$lunes ";
$rs = mysql_query($sql) or die("La siguiente consulta contiene algún error:<br>nSQL: <b>$sql</b>");

while ($row = mysql_fetch_array($rs))
{ $idlunes=$row["id"]; }

mysql_close($bd);
?>

La pregunta principal es: He de hacer una consulta para cada dia de la semana y guardarla en cada variable? Se puede hacer esto? se ha de cerrar la base y luego volverla a abrir? es malo hacerlo?
Ai alguna manera de que mediante una consulta me vaya a un id que quiera y me muestre los 6 registros siguientes?
La idea es que en el formulario, el value sea igual al importe si tiene y luego al darle al enviar se modifiquen todos los registros, no uno a uno.
No se si me he explicado bien, transmitir lo que uno piensa es dificil :(

Gracias y saludos a todos ;)
  #2 (permalink)  
Antiguo 17/01/2012, 05:55
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 3 meses
Puntos: 331
Respuesta: no se estructurar una consulta mysql

Reduce por favor el código y la pregunta para que sea un poco más facil ayudarte.
No tienes que hacer una consulta por cada dia de la semana, puedes hacer una consulta por semana, así sabes que cada registro es un día. Si estás guardando apuntes, modifica tu tabla y trabaja con fechas:

id fecha importe semana_n

La semana_n la puedes obtener mediante mysql, los mismo con el dia actual y los próximos 6 dias. También puedes utilizar un campo timestamp, dado que el usuario no puede ingresar la fecha sino que se la das tú, puedes usar cualquier opción.
Saludos!
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 17/01/2012, 06:18
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 3 meses
Puntos: 331
Respuesta: no se estructurar una consulta mysql

Te paso un ejemplo.
Si guardas las fechas como timestamp() (entero de 10 posciones), la tabla te puede quedar así:

Código MySQL:
Ver original
  1. /*Table structure for table `apuntes` */
  2.  
  3.  
  4.  
  5. DROP TABLE IF EXISTS `apuntes`;
  6.  
  7.  
  8.  
  9. CREATE TABLE `apuntes` (
  10.  
  11.   `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Id unico',
  12.  
  13.   `fecha` int(10) DEFAULT NULL COMMENT 'Timestamp',
  14.  
  15.   `importe` double(6,2) DEFAULT NULL COMMENT 'Importe en moneda',
  16.  
  17.   `observaciones` varchar(256) DEFAULT NULL COMMENT 'Informativo',
  18.  
  19.   PRIMARY KEY (`id`)
  20.  
  21. ) ENGINE=MyISAM AUTO_INCREMENT=18 DEFAULT CHARSET=latin1;
  22.  
  23.  
  24.  
  25. /*Data for the table `apuntes` */
  26.  
  27.  
  28.  
  29. insert  into `apuntes`(`id`,`fecha`,`importe`,`observaciones`) values (1,1326902349,100.00,'Ventas de hoy aprox.: 100.00'),(2,1327002349,123.00,'Ventas de hoy aprox.: 123.00'),(3,1327102349,123.00,'Ventas de hoy aprox.: 123.00'),(4,1327202349,12.00,'Ventas de hoy aprox.: 12.00'),(5,1327302349,4545.00,'Ventas de hoy aprox.: 4545.00'),(6,1327402349,6565.00,'Ventas de hoy aprox.: 6565.00'),(7,1327502349,767.00,'Ventas de hoy aprox.: 767.00'),(8,1327602349,67.00,'Ventas de hoy aprox.: 67.00'),(9,1327702349,67.00,'Ventas de hoy aprox.: 67.00'),(10,1327802349,9999.99,'Ventas de hoy aprox.: 9999.99'),(11,1327902349,678.00,'Ventas de hoy aprox.: 678.00'),(12,1328002349,6546.00,'Ventas de hoy aprox.: 6546.00'),(13,1328102349,9999.99,'Ventas de hoy aprox.: 9999.99'),(14,1328202349,6654.00,'Ventas de hoy aprox.: 6654.00'),(15,1328302349,775.00,'Ventas de hoy aprox.: 775.00'),(16,1328402349,678.00,'Ventas de hoy aprox.: 678.00'),(17,1328502349,867.00,'Ventas de hoy aprox.: 867.00');

Ejecuta esa select y prueba estas consultas:

Código MySQL:
Ver original
  1. #Semana actual
  2. #Apuntes de la semana actual
  3. SELECT * FROM apuntes WHERE WEEK(FROM_UNIXTIME(fecha, "%Y-%m-%d")) = WEEK(NOW());
  4. #Fechas y semanas
  5. SELECT WEEK(FROM_UNIXTIME(fecha, "%Y-%m-%d")) AS semana, FROM_UNIXTIME(fecha, "%Y-%m-%d") AS fecha FROM apuntes;
  6. #Ventas por semana
  7. SELECT WEEK(FROM_UNIXTIME(fecha, "%Y-%m-%d")) AS semana, SUM(importe) AS ventas FROM apuntes GROUP BY WEEK(FROM_UNIXTIME(fecha, "%Y-%m-%d"));

Saluditos
__________________
Fere libenter homines, id quod volunt, credunt.
  #4 (permalink)  
Antiguo 17/01/2012, 06:21
 
Fecha de Ingreso: enero-2007
Mensajes: 4
Antigüedad: 17 años, 10 meses
Puntos: 0
Respuesta: no se estructurar una consulta mysql

Gracias Repara2

Al principio empece a trabajar con el campo Fecha como fecha del servidor, pero me he encontrado que me es mas dificil controlar los resultados que salen. Como su uso solo es para comparar y la base de datos no pesara, me va mejor asi.

La pregunta que necesito es, que consulta he de hacer para ke me muestre 7 registros consecutivos a partir de un id que le doy yo.

Esto no funciona porque le estoy diciendo que me busque todos los registros donde id=040212, evidentemente solo ai uno:

$idlunes="040212"
$bd=mysql_connect("localhost", "root", "");
mysql_select_db("dias",$bd);
$sql = "select * from Dias where id=$idlunes order by id asc LIMIT 0,7";
$rs = mysql_query($sql);

while ($row = mysql_fetch_array($rs))
{ ... }

Ahora bien, que consulta funcionara para sustituir el where id=$idlunes y me vaya directamente al id=$idlunes y me almacene los 7 registros siguientes (bueno, eso con el limit ya lo haria)
  #5 (permalink)  
Antiguo 17/01/2012, 06:22
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 3 meses
Puntos: 331
Respuesta: no se estructurar una consulta mysql

Si los id son siempre incrementales, puedes hacer algo como

... where id >= $id
__________________
Fere libenter homines, id quod volunt, credunt.

Etiquetas: estructurar, formulario, mysql, registro, sql, tabla, variables
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 08:02.