Page 1 sur 1

Dâtes et requetes

Posté : 26 oct. 2007, 17:31
par supercanard
Bonjour

J'ai des dâtes au format US dans ma base (2007-10-25)

Je voudrais savoir si via une requête il est possible de sélectionner des champs avec des conditions de ce type : WERE mois = x AND annnée = x.

Merci d'avance
Bon week end :wink:

Posté : 26 oct. 2007, 17:33
par zeus
Et si tu essayais une requête du genre

Code : Tout sélectionner

SELECT champ FROM matable WHERE date = 'annee-mois-%'

Posté : 26 oct. 2007, 17:45
par supercanard
Effectivement c'est une idée
Par contre ça ne me retourne aucun résultat
$year= '2007-%-%';
	$req_visites= mysql_query("SELECT ip,page,date FROM bloom_stats WHERE date='".$year."' ORDER BY date,ip DESC"); // SELECTION DES VISITES

Posté : 26 oct. 2007, 17:50
par Tracker
Essaie plutot:
$year= '2007-__-__';
	$req_visites= mysql_query("SELECT ip,page,date FROM bloom_stats WHERE date like '".$year."' ORDER BY date,ip DESC");

Tracker.

Posté : 26 oct. 2007, 18:36
par Hubert Roksor
ça ne me retourne aucun résultat
Le problème vient de l'opérateur, qui doit être LIKE plutôt que =

Inutile de vous embarasser avec des masques trop longs, si vous voulez une année particulière utilisez LIKE '2007-%', pareil pour un mois, LIKE '2007-11-%'.

Posté : 26 oct. 2007, 22:30
par iclo
Petite info en plus, ce ne sont pas des dates us (l'année est en première), mais le format "normal" pour stocker des dates. La raison de stocker sous la forme aaaa-mm-jj est de pouvoir réaliser des tris sur les dates aisément.

Posté : 27 oct. 2007, 00:53
par supercanard
Merci pour vos réponses.
Par contre je nage là. Dans le default on est censé récupérer les infos dont la dâte est celle du jour. Résultat tout est récupéré, même les entrées d'il y a 3 jours en arrière... Et puis dans la case mois le résultat ben c'est le même, tout est affiché, mais bon la je suis moins sur de moi sur le fait qu'il n'y ais pas d'erreur...

$date_jour= date("Y-m-d"); // DATE DU JOUR
default:
	$req_visites= mysql_query("SELECT ip,page,date FROM bloom_stats WHERE date ='".$date_jour."' ORDER BY date,ip DESC"); // SELECTION DES VISITES
	$req_visiteurs= mysql_query("SELECT DISTINCT ip,date FROM bloom_stats WHERE date ='".$date_jour."' ORDER BY date,ip DESC"); // SELECTION DES VISITEURS
	$nb_visites= mysql_num_rows($req_visites);
	$nb_visiteurs= mysql_num_rows($req_visiteurs);
case 'mois':
	$mois= '2007-10-__';
	$req_visites= mysql_query("SELECT ip,page,date FROM bloom_stats WHERE date LIKE '".$mois."' ORDER BY date,ip DESC"); // SELECTION DES VISITES
	$req_visiteurs= mysql_query("SELECT DISTINCT ip,date FROM bloom_stats WHERE date LIKE '".$mois."' ORDER BY date,ip DESC"); // SELECTION DES VISITEURS
	$nb_visites= mysql_num_rows($req_visites);
	$nb_visiteurs= mysql_num_rows($req_visiteurs);
}

Posté : 27 oct. 2007, 01:44
par Sékiltoyai
Voir le comportement de switch, et cela a beau être illogique sur certains points, c'est le même dans tous les langages typés C.

Sinon, pour ton problème de date, n'as tu pas pensé à un champ date pour stocker ta date, histoire d'utiliser les fonctions de mysql sur les dates ?

Posté : 27 oct. 2007, 09:39
par zeus
Dans un switch case, il faut penser aux break après la fin du traitement d'un case ;)

De plus, tu remarqueras que dans tes 2 cas, tu peux mutualiser beaucoup de code et ne l'écrire qu'à un unique endroit :
// En fonction de quelque chose
switch(...)
{
  default: // Jour courant
    $where_date = date("Y-m-d"); // Utilisation de la date du jour
    break;
  case 'mois': // Mois courant
    $where_date= date('Y-m-%'); // Utilisation du mois courant
    break;
}

$str_requete_visites = "SELECT ip, page, date FROM bloom_stats WHERE date LIKE '". $where_date ."' ORDER BY date,ip DESC";
$str_requete_visiteurs = "SELECT DISTINCT ip, date FROM bloom_stats WHERE date LIKE '". $where_date ."' ORDER BY date, ip DESC"
$req_visites= mysql_query( $str_requete_visites ); // SELECTION DES VISITES
$req_visiteurs= mysql_query( $str_requete_visiteurs ); // SELECTION DES VISITEURS
$nb_visites= mysql_num_rows($req_visites);
$nb_visiteurs= mysql_num_rows($req_visiteurs);

Posté : 27 oct. 2007, 10:06
par Sékiltoyai
zeus, le default, c'est à la fin, sinon il est exécuté quelquesoit la valeur passée…

Posté : 27 oct. 2007, 10:12
par zeus
pas sur :-k

edit : Il me semblait, essaye ça ;)
$value = 1;

switch ( $value )
{
        default:
                echo "Defaut";
                break;
        case 1:
                echo "Dans le case";
                break;
}

Posté : 27 oct. 2007, 13:50
par Sékiltoyai
Ok, je viens de vérifier, ca se comporte pareil en C, ce qui me fait dire que je trouve cette structure de plus en plus illogique…

Posté : 29 oct. 2007, 15:35
par Ryle
Il n'y a effectivement pas de position spécifique aux valeurs d'un switch.

L'intérêt est surtout du au fait que le "break" n'est pas obligatoire et qu'il peut s'avérer utile de l'omettre pour que plusieurs instructions du switch soient exécutées à la suite...

Par exemple ici, si la valeur est 1, seul le case 1 est exécutée, si la valeur est 2, seul le case 2 est exécutée, en revanche si la valeur est autre, le défault ET le case 1 seront exécutés dans cet ordre :
switch ($var) {
  default :
    // .... 
  case 1 : 
    // ...
    break;
  case 2 : 
    // ...
    break;
}
Ca évite d'avoir à recoller le code du case 1 dans le default. J'ai pas d'exemple concret à donner en tête mais je me suis déjà servi de cette propriété d'enchainement et avait donc joué sur l'ordre des cases :)

Posté : 29 oct. 2007, 23:41
par Berzemus
moi j'ai un exemple: un script CLI que j'aime pouvoir prendre à un endroit précis (une lourde importation de DB). J'ai mis toute la suite des opérations dans un gros switch, sans insérer de break, avec des "case" divisant les opérations principales, ce qui me permet de sauter la ou je veux, sans m'embarasser de if's lourdingues.

C'est assez pratique. A noter que break peut prendre un paramètre, pour interrompre plusieurs boucles imbriquées.