Comunidad de diseño web y desarrollo en internet online

Ayuda - Consulta mySql+php

Citar            
MensajeEscrito el 07 Ene 2009 11:06 pm
Buenas, estoy diseñando una web.... Y me la rebusco no conozco mucho del tema...
Ahora tengo una consulta y lo que quiero hacer es...

Que me traiga de la fecha añadida, el valor del mes y año... Y en base a eso estampar un valor en la columna que creo ej " mensual " para tomar por mes y listar en un menu...

Esto es lo que estoy haciendo.

Código PHP:

Código PHP :

<?

require_once(dirname(__FILE__).'/mysql_db.inc');

$processMensual = new processMensual();

?>

<html>
<head> <title>Process Mensual For ART</title>
</head>

<body>
<?php $processMensual->process(); ?>


</body>
</html>

<?php

class processMensual {

function processMensual()
{
//constructor

}

function process()
{

$this->_load_configuration();

//print $this->checkIfColumnExists();

if ($this->checkIfColumnExists())
{

//print "Column found.";

}
else
{
$this->createColumn();
$this->processMensualForART();

print "<br>Mensual processed for all art.";
}

}





function _load_configuration() {

# Load the Main Configuration; Set the MySQL variables.

require_once(dirname(__FILE__)."/mdb_config.inc");

$this->template_path = dirname(__FILE__)."/templates/".$this->config['options']['template'];

$this->db = new mysql_db($this->config['mysql']['server'], $this->config['mysql']['username'], $this->config['mysql']['password']);

$this->mysql_table = "`".$this->config['mysql']['database']."`.`".$this->config['mysql']['table']."`";

# Load the Language and Template Configurations

//require_once(dirname(__FILE__)."/languages/".$this->config['options']['language'].".inc");

//require_once($this->template_path."/config.inc");

}

function checkIfColumnExists()
{

$query = "SHOW columns FROM $this->mysql_table ";

$result = $this->db->query($query);

while ( $row = $result->fetch_array() )
{
//print "<br>$row[0]";
if ($row[0]=='MENSUAL'){
print "<br>Columns Found ";


return true;
}
}

print "<br>Column not Found!";

return false;


}

function createColumn()
{
$lsSQL = "ALTER TABLE $this->mysql_table ADD MENSUAL VARCHAR(15)";

$updateresult = $this->db->query($lsSQL);

print "<br>Column MENSUAL created!";

}


function processMensualForArt()
{


$query = "SELECT NUM, DATE_FORMAT(dateadd,'%M %Y') 'mensual' FROM $this->mysql_table";

$result = $this->db->query($query);



while ( $row = $result->fetch_assoc() )

{

$mensual='';
$y = $row[mensual];


if ($y = 'December 2007') {
$mensual="December 2007";
}
elseif ($y = 'December 2008') {
$mensual="December 2008";
}
elseif ( $y >= 'November 2007' ) {
$mensual="November 2007";
}
elseif ( $y >= 'Octuber 2007' ) {
$mensual="Octuber 2007";
}
elseif ( $y >= 'September 2007' ) {
$mensual="September 2007";
}
elseif ( $y >= 'August 2007' ) {
$mensual="August 2007";
}
elseif ( $y >= 'July 2007' ) {
$mensual="July 2007";
}
elseif ( $y >= 'June 2007' ) {
$mensual="June 2007";
}
elseif ( $y >= 'May 2007' ) {
$mensual="May 2007";
}
elseif ( $y >= 'May 2007' ) {
$mensual="May 2007";
}
elseif ( $y >= 'April 2007' ) {
$mensual="April 2007";
}
elseif ( $y >= 'March 2007' ) {
$mensual="March 2007";
}
elseif ( $y >= 'February 2007' ) {
$mensual="February 2007";
}
elseif ( $y >= 'January 2007' ) {
$mensual="January 2007";
}
elseif ($y >= 'December 2008') {
$mensual="December 2008";
}
elseif ( $y >= 'November 2008' ) {
$mensual="November 2008";
}
elseif ( $y >= 'Octuber 2008' ) {
$mensual="Octuber 2008";
}
elseif ( $y >= 'September 2008' ) {
$mensual="September 2008";
}
elseif ( $y >= 'August 2008' ) {
$mensual="August 2008";
}
elseif ( $y >= 'July 2008' ) {
$mensual="July 2008";
}
elseif ( $y >= 'June 2008' ) {
$mensual="June 2008";
}
elseif ( $y >= 'May 2008' ) {
$mensual="May 2008";
}
elseif ( $y >= 'May 2008' ) {
$mensual="May 2008";
}
elseif ( $y >= 'April 2008' ) {
$mensual="April 2008";
}
elseif ( $y >= 'March 2008' ) {
$mensual="March 2008";
}
elseif ( $y >= 'February 2008' ) {
$mensual="February 2008";
}
elseif ( $y >= 'January 2008' ) {
$mensual="January 2008";
}
else{
$mensual="Otro";
}


$lsSQL = "UPDATE $this->mysql_table SET MENSUAL='$mensual' WHERE NUM=$row[NUM]";

$updateresult = $this->db->query($lsSQL);

}

}

} //class
?>


Esto me trae la consulta que hago...

Código PHP:
549 June 2007
103 June 2007
745 June 2007
147 June 2007
2612 December 2008

Que es esta
Código PHP:
SELECT NUM, DATE_FORMAT(dateadd,'%M %Y') 'mensual' FROM sumongo

Alguien sabe que hago mal... Porque me imprime en la columna mensual que creo el valor... Pero solo del que encuentra primero...

Si el art, tiene la fecha agregada del 01-12-2007
y otro el 03-12-2008 Imprime en ambos el DECEMBER 2007... Pero si hago la consulta me imprime como corresponde en cada uno....

Por darkemi20

4 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Ene 2009 12:55 am
Resume y no mescles php con mysql son 2 conceptos totalmente distintos

paso 1 comprueba que puedas hacer un select sencillo

Código MySQL :

SELECT * FROM mi_tabla


Paso 2 comprueba que el sql que escupe el php esta correcto, imprimiendo por pantalla el sql antes de ejecutarlo, cuand lo imprimas por pantalla copialo y pegalo en lo que uses para verificar consultas, por ejemplo phpmyadmin.


atento, por ley no leo preguntas con mas de 10 lineas se breve por que no me voy a dar el trabajo de YO analizar todo TU codigo

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 08 Ene 2009 02:37 pm
Primero que nada, Inyaka tiene toda la razón, resume el código que vas a postear, limitate solo al codigo donde crees que falla lo que intentas hacer, en este caso bastaba con postear el codigo de la funcion processMensualForArt(), es MUY tedioso leer un código demasiado largo...

Segundo, creo tu error es por esta linea en la función a la cual hice referencia:

Código PHP :

if ($y = 'December 2007')// Siempre va a devolver true

//Deberia ser

if ($y == 'December 2007')
En los condicionales debes usar == (doble igual)

Tercero, tienes otros errores como:

Código PHP :

$y = $row[mensual]; //Esto da error

//Deberia ser

$y = $row['mensual'];
A la final $y queda con... realmente no se con que, pero no con lo que crees o quisieras, y luego la condición que dije anteriormente se cumple y entra directo...

Código PHP :

//Estas condiciones están repetidas
elseif ( $y >= 'May 2008' )
elseif ( $y >= 'May 2007' )

Código PHP :

$lsSQL = "UPDATE $this->mysql_table SET MENSUAL='$mensual' WHERE NUM=$row[NUM]"; //Esto da error

//Deberia ser

$lsSQL = "UPDATE $this->mysql_table SET MENSUAL='$mensual' WHERE NUM=".$row['NUM'];
Y por ultimo... Por el amor de diós, puedes hacer eso de manera más eficiente, ese IF gigantezco aparte de ineficiente, es feo...

Saludos...

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

firefox
Citar            
MensajeEscrito el 08 Ene 2009 09:51 pm
JAjaja....Gracias... Voy a probar...

Ahora te comento que, el SELECT esta bien y imprime... El error está en la parte del if.... Muy posible que por lo que me decis...

Te es largo y todo... Pero es un proceso... Lo que hace es marcar lo que ya esta... O sea se usa una vez...

1.- Crea la tabla " MENSUAL "
2.- Revisa toda la base y marca en mensual... Segun la fecha de agregado el articulo el mes y el año...
3.- Una vez que me funcione eso... Tengo creada la función que me trae al menu los art novedades por mes año...

EJ: Enero 2008, Enero 2007 y Enero 2009...

Ahora pruebo lo que me comentaron y comento... Gracias.-

Por darkemi20

4 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Ene 2009 10:48 pm

darkemi20 escribió:

El error está en la parte del if.... Muy posible que por lo que me decis...
Sin intención de ser arrogante ni nada por el estilo, no es que sea muy posible, esa ES la razón, no es casualidad que con tu ejemplo:

darkemi20 escribió:

Si el art, tiene la fecha agregada del 01-12-2007
y otro el 03-12-2008 Imprime en ambos el DECEMBER 2007... Pero si hago la consulta me imprime como corresponde en cada uno....
Imprima todas las veces DECEMBER 2007, si quieres, en el primer IF asignale a $mensual lo que tu quieras y verás que eso es lo que va a mostrar...

Otra cosa, nuevamente apoyo a Inyaka con lo de que no deberias mezclar MySQL y PHP... No se para que en un momento determinado quisieras verificar si la columna mensual existe en tu tabla o agregarla, creo que la debería tener desde un principio y ya...

Saludos...

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

msie7
Citar            
MensajeEscrito el 09 Ene 2009 12:47 am
No me funciono.... Probe lo que me comentaste... Y me imprime en mensual OTRO ... Y dejando...

No le encuentro la vuelta...

O lo puedo hacer con otra función ??

Gracias de antemanto y gracias por ayudar... Man... Te lo re agradezco...

Por darkemi20

4 de clabLevel



 

firefox
Citar            
MensajeEscrito el 09 Ene 2009 05:13 pm
Hola de nuevo darkemi20, realmente no termino de entender muy bien lo que quieres hacer, pero leí más atentamente tu GIGANTEZCO IF y tiene un pequeño gran problema, 3 ejemplos de condiciones verdaderas:

Código PHP :

"December 2007" < "November 2007"

"January 2007" > "December 2007"

"August 2007" < "January 2007"
Tus condiciones están erradas ya que la comparación del cotenido de los strings se hace en base de los caracteres que el mismo contenga; que su contenido se "December 2007" o cualquier otra fecha, no significa que la comparación va a ser realizada como fechas...

Tienes que hacer lo que quieras hacer de otra manera...
Pd: ya veremos si engendrarás otro IF demoniaco :lol: :lol: :lol: :lol: :P

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

msie7
Citar            
MensajeEscrito el 09 Ene 2009 09:39 pm
Te explico....
Lo que quiero hacer es...

Código :

$query = "SELECT NUM, DATE_FORMAT(dateadd,'%M %Y') 'mensual' FROM $this->mysql_table";


Con ese select me tira lo siguiente....

Código :

549 June 2007
103 June 2007
745 June 2007
147 June 2007
2612 December 2008


Ahora con el if o lo que corresponda... Quiero que en la tabla Mensual la cual creo al principio... Recorra la base y imprima en Mensual... El mes y el año...

Junio 2007 cuando en select da june 2007 y asi...

Gracias y espero me puedas guiar.... o ayudar....

Por darkemi20

4 de clabLevel



 

firefox
Citar            
MensajeEscrito el 09 Ene 2009 09:57 pm

Código :

$query = "SELECT SUM(NUM), DATE_FORMAT(dateadd,'%M %Y') 'mensual' FROM $this->mysql_table GROUP BY mensual";

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 10 Ene 2009 02:46 am
Si entendí bien lo que quieres hacer creo que esto servirá:

Código PHP :

$query = "SELECT NUM, dateadd FROM $this->mysql_table";
$result = $this->db->query($query); 

while ( $row = $result->fetch_assoc() )
{
   $array_fecha = explode('-',$row['dateadd']);

   switch ($array_fecha[1])
   {
      case 1: $mensual = "Enero "; break;
      case 2: $mensual = "Febrero "; break;
      case 3: $mensual = "Marzo "; break;
      case 4: $mensual = "Abril "; break;
      case 5: $mensual = "Mayo "; break;
      case 6: $mensual = "Junio "; break;
      case 7: $mensual = "Julio "; break;
      case 8: $mensual = "Agosto "; break;
      case 9: $mensual = "Septiembre "; break;
      case 10: $mensual = "Octubre "; break;
      case 11: $mensual = "Noviembre "; break;
      case 12: $mensual = "Diciembre "; break;
   }

   $mensual .= $array_fecha[0];

   $lsSQL = "UPDATE $this->mysql_table SET MENSUAL='$mensual' WHERE NUM=$row['NUM']";
   $this->db->query($lsSQL); 
}
Cabe destacar que la línea del explode depende del formato que tenga la fecha en tu BD, como yo lo escribí servira si el formato es el gringo, es decir, por ejemplo: 2009-01-09

Saludos...

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

msie7
Citar            
MensajeEscrito el 10 Ene 2009 03:20 am
No me va... Es como que me falta { }

Código :

<?

require_once(dirname(__FILE__).'/mysql_db.inc');

$processMensual = new processMensual();

?>

<html>
<head> <title>Process Mensual For ART</title>
</head>

<body>
  <?php $processMensual->process(); ?>   


</body>
</html>

<?php

class processMensual {
   
   function processMensual()
   {
      //constructor
      
   }
   
   function process()
   {
      
      $this->_load_configuration();
      
      //print $this->checkIfColumnExists();
      
      if ($this->checkIfColumnExists())
      {
         
         //print "Column found.";
      
      }
      else
      {
         $this->createColumn();
         $this->processMensualForART();
         
         print "<br>Mensual processed for all ART.";
      }
      
   }
   
   
   
    
   
function _load_configuration() {

        # Load the Main Configuration; Set the MySQL variables.

        require_once(dirname(__FILE__)."/mdb_config.inc");

        $this->template_path = dirname(__FILE__)."/templates/".$this->config['options']['template'];

        $this->db = new mysql_db($this->config['mysql']['server'], $this->config['mysql']['username'], $this->config['mysql']['password']);

        $this->mysql_table = "`".$this->config['mysql']['database']."`.`".$this->config['mysql']['table']."`";

        # Load the Language and Template Configurations

        //require_once(dirname(__FILE__)."/languages/".$this->config['options']['language'].".inc");

        //require_once($this->template_path."/config.inc");

    }
   
function checkIfColumnExists()
{
   
   $query = "SHOW columns FROM $this->mysql_table ";
   
   $result = $this->db->query($query);
   
   while ( $row = $result->fetch_array() )
   {
      //print "<br>$row[0]";
      if ($row[0]=='MENSUAL'){
         print "<br>Columns Found ";
               
         
         return true;
      }
   }
   
   print "<br>Column not Found!";
      
   return false;
      
   
}

function createColumn()
{
   $lsSQL = "ALTER TABLE $this->mysql_table ADD MENSUAL VARCHAR(15)";
   
   $updateresult = $this->db->query($lsSQL);
   
   print "<br>Column MENSUAL created!";
   
}
   

function processMensualForART()
{


$query = "SELECT NUM, dateadd FROM $this->mysql_table"; 
$result = $this->db->query($query);  
 
while ( $row = $result->fetch_assoc() ) 
{ 
   $array_fecha = explode('-',$row['dateadd']); 
 
   switch ($array_fecha[1]) 
   { 
      case 1: $mensual = "Enero "; break; 
      case 2: $mensual = "Febrero "; break; 
      case 3: $mensual = "Marzo "; break; 
      case 4: $mensual = "Abril "; break; 
      case 5: $mensual = "Mayo "; break; 
      case 6: $mensual = "Junio "; break; 
      case 7: $mensual = "Julio "; break; 
      case 8: $mensual = "Agosto "; break; 
      case 9: $mensual = "Septiembre "; break; 
      case 10: $mensual = "Octubre "; break; 
      case 11: $mensual = "Noviembre "; break; 
      case 12: $mensual = "Diciembre "; break; 
   } 
 
   $mensual .= $array_fecha[0]; 
 
   $lsSQL = "UPDATE $this->mysql_table SET MENSUAL='$mensual' WHERE NUM=$row['NUM']"; 
   $this->db->query($lsSQL);  
}

} //class
?>


Error

Código :

Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\Archivos de programa\OCS Inventory NG\xampp\htdocs\todoendvd2\processMensual2.php on line 142

Por darkemi20

4 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Ene 2009 06:00 am
ese error es por que haces esto:

Código PHP :

$lsSQL = "UPDATE $this->mysql_table SET MENSUAL='$mensual' WHERE NUM=$row['NUM']"; 


en ves de esto:

Código PHP :

$lsSQL = "UPDATE $this->mysql_table SET MENSUAL='$mensual' WHERE NUM= {$row['NUM']}";// OJO CON  {  } 



sin embargo no entiendo por que te complicas tanto para poner un fecha con nombre si con numeros es mas facil y ademas tienes muchas mas posibilidades(por ejemplo comparar fechas)

Código MySQL :

UPDATE mi_mysql_table SET MENSUAL=NOW()  WHERE NUM= 111111"

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 10 Ene 2009 09:13 am
Claro pero yo le quiero poner... A mas de 3000 Art, por fecha de agregado el mes y año que corresponde...

Por darkemi20

4 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Ene 2009 02:45 pm
Luego de solucionar el error (my bad) ¿Sirvió para lo que quieres hacer?

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

msie7
Citar            
MensajeEscrito el 10 Ene 2009 05:18 pm

Inyaka escribió:

sin embargo no entiendo por que te complicas tanto para poner un fecha con nombre si con numeros es mas facil y ademas tienes muchas mas posibilidades(por ejemplo comparar fechas)
Cierto, creo que seria mejor insertar en tu tanla la fecha tal cual y luego cuando vayas a armar el menu la conviertas al formato en que la quieras mostrar, esto porque como dice Inyaka tienes mas posibilidades a la hora de hacer un estadistico, reporte, o lo que se te ocurra que implique comparar las fechas...

Saludos...

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

firefox
Citar            
MensajeEscrito el 11 Ene 2009 03:22 am
Gente son unos genios....

Quedo de maravilla.... MUCHISIMAS GRACIAS....

Por darkemi20

4 de clabLevel



 

firefox
Citar            
MensajeEscrito el 29 Ene 2009 07:30 pm
hola amiguitos... necesito su ayuda porfa..... necesito desplegar un resultado de la consulta mysql pero nose que pasa me da el siguiente error:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\consultas\consulta3.php on line 45

utilizo variables que vienen de dos formularios anteriores.... y si logro traer las variables porq las imprimo a la vista pero a la hora de hacer la consulta no me la ejecuta por fa ayuda.... el codigo es :

Código :

$conectar = mysql_connect("localhost","root");//la conexion
mysql_select_db("cv");
$busqueda="select ...........
and dati.institucion = $idinstitucion /// esta es la variable q traigo desde el formulario anterior
and det.codtit = $idtitulo  order by dat.nombre"; // al igual q $idtitulo
$resultado= mysql_query($busqueda);
 while ($aux= mysql_fetch_array($resultado)){ // utilizo la consulta e impromo los valores
php echo $aux["cedula"];?></th>
 }


Nose donde esta el error AYUDA.... porfa... porfa porfa porfa....

Por lexxa_ga

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 29 Ene 2009 07:56 pm
Has un echo de $busqueda a ver si la consulta está armada como quieres y pruebala directamente en MySQL, porque el warning ese significa que la consulta no te arrojó nada o tiene un error...

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

firefox
Citar            
MensajeEscrito el 29 Ene 2009 08:23 pm
JIJIJIJI si lo pobre antes ..... y si me bota resultados .... pero ya encontre el error como estoy interactuando con la base de datos las variables q hacen referencia a los campos son de tipo character... entonces debia colocarlas entre comillas simples , jajajajj no me percate de esto y venia peleando con esta consulta desde hace dos dias.... muuuuuuuuhcas gracias muuuuuuuuuuuuchas gracias.... aqui dejo el error por si acaso a alguien le pase lo mismo jejejej :wink: :wink: :wink: :wink:

Código :

$conectar = mysql_connect("localhost","root");
mysql_select_db("cv");
$busqueda=".........
and dati.institucion = '$idinstitucion' // aqui va entre comillas la variable q viene del form anterior....
and det.codtit = '$idtitulo'  order by dat.nombre"

Por lexxa_ga

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 29 Ene 2009 08:30 pm
gracias KB-27...... gracias gracias.....

Por lexxa_ga

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 29 Ene 2009 09:30 pm
Ya aprendiste el significado de un warning y además que hacer para verificar que está mal (y)

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

firefox

 

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