Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: URKA84 en 24 de Agosto 2014, 08:45

Título: mysql IF
Publicado por: URKA84 en 24 de Agosto 2014, 08:45
Hola, tengo que utilizar el IF de mysql en una web que estoy haciendo, pero no sé como utilizarlo en este caso.

He programado antes con IF en java pero en mysql me cuesta entenderlo.

en mi web quiero mostrar las noticias de esta semana, pero empezando por el lunes, de modo que si estamos a miércoles las noticias sean del lunes pasado al domingo.

Así que tengo que decir "si hoy es miércoles muestra las noticias del 'día actual' menos  2 días, hasta 'día actual' más 4 días.

He mirado tutoriales y ejemplos pero no me aclaro. A ver si alguien me ayuda...

Este es mi intento de código en php que no funcionó por razones obvias... estaba utilizando una función mysql en un IF de php:


Código: [Seleccionar]
<?php    
    
    
$link mysql_connect("mysql13.000webhost.com","a4047274_fiestas","urkaka12");

mysql_select_db("a4047274_fiestas"$link);
        
    
    
//intento de usar IF de mysql --> $result = mysql_query("SELECT * FROM valencia WHERE fecha_inicio BETWEEN SYSDATE() AND DATE_ADD(SYSDATE(), INTERVAL 7 DAY), IF( DAYNAME(CURDATE()) == 'monday' ", $link); 
    
    
    
    
    
    
   
    
    
if(DAYNAME(CURDATE()) == 'monday'){
    
$result mysql_query("SELECT * FROM valencia WHERE fecha_inicio BETWEEN SYSDATE() AND DATE_ADD(SYSDATE(), INTERVAL 7 DAY)"$link);
    }
    
    else if(
$dia_actual == 'tuesday'){
    
$result mysql_query("SELECT * FROM valencia WHERE fecha_inicio BETWEEN DATE_ADD(SYSDATE(), INTERVAL -1 DAY)  SYSDATE() AND DATE_ADD(SYSDATE(), INTERVAL 6 DAY)"$link);
    }
        
   
else if($dia_actual == 'wednesday'){
    
$result mysql_query("SELECT * FROM valencia WHERE fecha_inicio BETWEEN DATE_ADD(SYSDATE(), INTERVAL -2 DAY)  SYSDATE() AND DATE_ADD(SYSDATE(), INTERVAL 5 DAY)"$link);
    }
    
   
else if($dia_actual == 'thursday'){
    
$result mysql_query("SELECT * FROM valencia WHERE fecha_inicio BETWEEN DATE_ADD(SYSDATE(), INTERVAL -3 DAY)  SYSDATE() AND DATE_ADD(SYSDATE(), INTERVAL 4 DAY)"$link);
    }
    
    else if(
$dia_actual == 'wensday'){
    
$result mysql_query("SELECT * FROM valencia WHERE fecha_inicio BETWEEN DATE_ADD(SYSDATE(), INTERVAL -4 DAY)  SYSDATE() AND DATE_ADD(SYSDATE(), INTERVAL 3 DAY)"$link);
    }
    
    else if(
$dia_actual == 'saturday'){
    
$result mysql_query("SELECT * FROM valencia WHERE fecha_inicio BETWEEN DATE_ADD(SYSDATE(), INTERVAL -5 DAY)  SYSDATE() AND DATE_ADD(SYSDATE(), INTERVAL 2 DAY)"$link);
    }
    
    else if(
$dia_actual == 'sunday'){$result mysql_query("SELECT * FROM valencia WHERE fecha_inicio BETWEEN DATE_ADD(SYSDATE(), INTERVAL -6 DAY)  SYSDATE() AND DATE_ADD(SYSDATE(), INTERVAL 1 DAY)"$link);
    }
    
    
    
    
    
    
    

//$result = mysql_query("SELECT * FROM valencia WHERE fecha_inicio BETWEEN SYSDATE() AND DATE_ADD(SYSDATE(), INTERVAL 7 DAY)", $link);
    
    
    
    
    

while($row mysql_fetch_array($result)){
echo "<hr>";
echo "Pueblo: ".$row['pueblo']."<br>";
echo "Fiesta: ".$row['fiesta']."<br>";
        echo 
"Comentarios: ".$row['comentarios']."<br>";
}

mysql_free_result($result);
mysql_close($link);
echo "<hr>";
?>


Gracias.
Título: Re:mysql IF
Publicado por: URKA84 en 24 de Agosto 2014, 12:37
Se me olvidó decir una cosa.

Una de las dudas que tengo sobre el IF de mysql, es que no sé si se puede utilizar un SELECT dentro del IF.
Título: Re:mysql IF
Publicado por: javi in the sky en 24 de Agosto 2014, 17:17
Hola, pienso que la manera más sencilla de resolverlo es crear dos variables:

$fechaInicio: almacena aquí la fecha de inicio (la actual menos dos días por ejemplo)

$fechaFinal: almacena aquí la fecha final (la actual más cuatro días por ejemplo)

Ahora haz el select de forma que escojas únicamente las fechas adecuadas:

$result = mysql_query("SELECT * FROM valencia WHERE fechaNoticia BETWEEN $fechaInicio AND $fechaFinal , $link);

La sintaxis no es tal como está escrita aquí, para intercalar variables tienes que usar el operador de concatenación (el punto) de la misma forma que harías con cadenas de texto, pero la idea quizás te sirva. Prueba y ya comentas  :D
Título: Re:mysql IF
Publicado por: URKA84 en 27 de Agosto 2014, 17:49
Hola, he estado mirando lo que me has dicho y he modificado el código.

Pero al parecer estoy haciendo mal el "IF".

Código: [Seleccionar]
<?php    
    
    $dia_actual 
date("l");    
    
    
    
$fecha_actual date("Y-m-d");
    
   
    
    echo 
"fecha actual: ".$fecha_actual;
    
    echo 
"día actual: ".$dia_actual;
    
  

    
    
  
 $fecha_1 date("Y-m-d");
    
     
$fecha_2 =  date("Y-m-d");
     
     echo 
$fecha_1;
     
     echo 
$fecha_2;
   
    
    
    
      
$link mysql_connect("mysql13.000webhost.com","a4047274_noticias","******");

mysql_select_db("a4047274_noticias"$link);
    
    
    
   
    
    if(
strcmp($dia_actual"monday")== TRUE){
    
    
$result mysql_query("SELECT * FROM valencia WHERE fecha_inicio BETWEEN DATE_ADD(SYSDATE(), INTERVAL -1 DAY)  SYSDATE() AND DATE_ADD(SYSDATE(), INTERVAL 6 DAY)"$link); 
    }
    
    else if(
strcmp($dia_actual'tuesday')== TRUE){
    
    
    
$result mysql_query("SELECT * FROM valencia WHERE fecha_inicio BETWEEN DATE_ADD(SYSDATE(), INTERVAL -1 DAY)  SYSDATE() AND DATE_ADD(SYSDATE(), INTERVAL 6 DAY)"$link); 
    }
        
   
else if(strcmp($dia_actual"Wednesday")== TRUE){
    
    echo 
"Wednesday"." x";
        
    
$result mysql_query("SELECT * FROM valencia WHERE fecha_inicio BETWEEN DATE_ADD(SYSDATE(), INTERVAL -2 DAY)  SYSDATE() AND DATE_ADD(SYSDATE(), INTERVAL 5 DAY)"$link);
    }
    
   
else if(strcmp($dia_actual'thursday')== TRUE){
    
$result mysql_query("SELECT * FROM valencia WHERE fecha_inicio BETWEEN DATE_ADD(SYSDATE(), INTERVAL -3 DAY)  SYSDATE() AND DATE_ADD(SYSDATE(), INTERVAL 4 DAY)"$link);
    }
    
    else if(
strcmp($dia_actual'friday')== TRUE){
    
$result mysql_query("SELECT * FROM valencia WHERE fecha_inicio BETWEEN DATE_ADD(SYSDATE(), INTERVAL -4 DAY)  SYSDATE() AND DATE_ADD(SYSDATE(), INTERVAL 3 DAY)"$link);
    }
    
    else if(
strcmp($dia_actual'saturday')== TRUE){
    
$result mysql_query("SELECT * FROM valencia WHERE fecha_inicio BETWEEN DATE_ADD(SYSDATE(), INTERVAL -5 DAY)  SYSDATE() AND DATE_ADD(SYSDATE(), INTERVAL 2 DAY)"$link);
    }
    
    else if(
strcmp($dia_actual'sunday')== TRUE){
    
$result mysql_query("SELECT * FROM valencia WHERE fecha_inicio BETWEEN DATE_ADD(SYSDATE(), INTERVAL -6 DAY)  SYSDATE() AND DATE_ADD(SYSDATE(), INTERVAL 1 DAY)"$link);
    }
    
 
    
    

while($row mysql_fetch_array($result)){
echo "<hr>";
echo "Pueblo: ".$row['pueblo']."<br>";
echo "Noticia: ".$row['noticia']."<br>";
        echo 
"Comentarios: ".$row['comentarios']."<br>";
}

mysql_free_result($result);
mysql_close($link);
echo "<hr>";
?>

Además te hago un par de preguntas:

1- para comparar dos strings se utiliza el strcomp() verdad?
2- se pone ==TRUE después del strcomp?
3- si es así, ¿porqué cuando llega a $result = mysql_query(... me da error, y encima no llega a ejecutar lo que está dentro del IF?.

Gracias y disculpa las molestias. De verdad, gracias por haberme respondido.
Título: Re:mysql IF
Publicado por: URKA84 en 28 de Agosto 2014, 07:24
Hay una cosa que quizás no he explicado bien.

He conseguido que se muestre lo que ocurrirá en los siguientes 7 días.

Pero yo lo que quiero es que se muestre siempre desde el anterior lunes.

Es decir, las noticias de esta semana empezando desde el lunes hasta el domingo.
Título: Re:mysql IF
Publicado por: URKA84 en 28 de Agosto 2014, 07:51
Estos son los errores que me salen:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/a4047274/public_html/fiestas/proximas.html on line 499



Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /home/a4047274/public_html/fiestas/proximas.html on line 506


Las líneas 499 y 506 corresponden a

Código: [Seleccionar]
while($row = mysql_fetch_array($result)){
Código: [Seleccionar]
mysql_free_result($result);
Que como podrás apreciar es donde se utiliza la variable "$result". Si al final de los IFs coloco una línea como
Código: [Seleccionar]
$result = mysql_query("SELECT * FROM valencia", $link);
entonces los errores desaparecen.

Gracias.
Título: Re:mysql IF
Publicado por: javi in the sky en 28 de Agosto 2014, 09:58
Hola, strcmp() (fíjate que es strcmp) sirve para comparar dos cadenas y saber si son iguales o no.

Por ejemplo if (strcmp("Hello world!","Hello world!") == 0) { echo 'Son iguales';}
else {echo 'No son iguales';}

Lo que devuelve la función es 0 si son iguales, y otro número si no son iguales.

Por tanto no tienes que poner == true porque no te devuelve un valor booleano.


Estas líneas entonces no son correctas: if(strcmp($dia_actual, 'thursday')== TRUE

si quieres saber si las dos cadenas son iguales tienes que escribir

if(strcmp($dia_actual, 'thursday')== 0)

No entiendo por qué no creas primero las variables que representen las fechas que quieres y luego haces la consulta del tipo $result = mysql_query("SELECT * FROM valencia WHERE fechaNoticia BETWEEN $fechaInicio AND $fechaFinal , $link); veo que estás usando sysdate, interval, etc. pero creo que sería más sencillo de la otra manera. De todas formas corrige los if y vete resolviendo errores paso a paso...

Saludos!!!
Título: Re:mysql IF
Publicado por: URKA84 en 29 de Agosto 2014, 16:14
Bueno, tenías razón, me estaba liando.

Al final este es el código:

Código: [Seleccionar]
<?php    
    
    $dia_actual 
date("l");    
    
    
    
$fecha_actual date("Y-m-d");
    
      
$link mysql_connect("mysql13.000webhost.com","a4047274_noticias","******");

mysql_select_db("a4047274_noticias"$link);
    
    


   
    
    if(
strcmp($dia_actual"Monday")== 0){
    
    
$fecha_1 $fecha_actual;
    
$fecha_1 date 'Y-m-j' $fecha_1);
    
    
    
$fecha_2 strtotime ('+6 day'strtotime ($fecha_actual));
    
$fecha_2 date 'Y-m-j' $fecha_2);
    
    }
    
    
    
    else if(
strcmp($dia_actual"Tuesday")== 0){
    
    
$fecha_1 strtotime ('-1 day'strtotime ($fecha_actual));
    
$fecha_1 date 'Y-m-j' $fecha_1);
    
    
    
$fecha_2 strtotime ('+5 day'strtotime ($fecha_actual));
    
$fecha_2 date 'Y-m-j' $fecha_2);
    
    }
    
    
    
   
else if(strcmp($dia_actual"Wednesday")== 0){
    
    
$fecha_1 strtotime ('-2 day'strtotime ($fecha_actual));
    
$fecha_1 date 'Y-m-j' $fecha_1);
    
    
    
$fecha_2 strtotime ('+4 day'strtotime ($fecha_actual));
    
$fecha_2 date 'Y-m-j' $fecha_2);
    
    }
   
   
   
   else if(
strcmp($dia_actual"Thursday")== 0){
    
    
$fecha_1 strtotime ('-3 day'strtotime ($fecha_actual));
    
$fecha_1 date 'Y-m-j' $fecha_1);
    
    
    
$fecha_2 strtotime ('+3 day'strtotime ($fecha_actual));
    
$fecha_2 date 'Y-m-j' $fecha_2);
    
    }
   
   
   
    else if(
strcmp($dia_actual"Friday")== 0){
    
    
$fecha_1 strtotime ('-4 day'strtotime ($fecha_actual));
    
$fecha_1 date 'Y-m-j' $fecha_1);
    
    
    
$fecha_2 strtotime ('+2 day'strtotime ($fecha_actual));
    
$fecha_2 date 'Y-m-j' $fecha_2);
    
    }
        
    
    
    else if(
strcmp($dia_actual"Saturday")== 0){
    
    
$fecha_1 strtotime ('-5 day'strtotime ($fecha_actual));
    
$fecha_1 date 'Y-m-j' $fecha_1);
    
    
    
$fecha_2 strtotime ('+1 day'strtotime ($fecha_actual));
    
$fecha_2 date 'Y-m-j' $fecha_2);
    
    }
    
    
    
    else if(
strcmp($dia_actual"Sunday")== 0){
    
    
$fecha_1 strtotime ('-6 day'strtotime ($fecha_actual));
    
$fecha_1 date 'Y-m-j' $fecha_1);
    
    
    
$fecha_2 $fecha_actual;
    
$fecha_2 date 'Y-m-j' $fecha_2);
        
    }
    
    
    
    
    
    
$result mysql_query("SELECT * FROM valencia WHERE fecha_inicio BETWEEN '$fecha_1' AND '$fecha_2'"$link); 
    
    

while($row mysql_fetch_array($result)){
echo "<hr>";
echo "Pueblo: ".$row['pueblo']."<br>";
echo "Noticia: ".$row['noticia']."<br>";
        echo 
"Comentarios: ".$row['comentarios']."<br>";
}

mysql_free_result($result);
mysql_close($link);
echo "<hr>";
?>

Y funciona!!! Gracias por haberme ayudado. Creo que sin tu ayuda no lo hubiese conseguido.
Título: Re:mysql IF
Publicado por: javi in the sky en 29 de Agosto 2014, 18:36
De nada, muchas veces pasa que tratamos de hacer las cosas de una forma más complicada de lo que realmente se puede hacer y una simple idea que nos dé otra persona sirve para cambiar el código y ponerlo nosotros mismos en marcha  ;D