Autor Tema: mysql IF  (Leído 7319 veces)

URKA84

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 90
    • Ver Perfil
mysql IF
« 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.

URKA84

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 90
    • Ver Perfil
Re:mysql IF
« Respuesta #1 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.

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Re:mysql IF
« Respuesta #2 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

URKA84

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 90
    • Ver Perfil
Re:mysql IF
« Respuesta #3 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.

URKA84

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 90
    • Ver Perfil
Re:mysql IF
« Respuesta #4 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.

URKA84

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 90
    • Ver Perfil
Re:mysql IF
« Respuesta #5 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.

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Re:mysql IF
« Respuesta #6 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!!!

URKA84

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 90
    • Ver Perfil
Re:mysql IF
« Respuesta #7 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.

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Re:mysql IF
« Respuesta #8 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

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".