Prob de construction de requete

Répondre
allserv
le 02/09/2004 à 16:04
allserv
Bonjour @ tous,

Voilà j'ai deux tables, une table membres qui contient tous les membres du site avec leurs id et une table credits qui contient trois champs (id, id_membre, date (format Y-m-d).

Le principe : Je veux en fait que chaque jour, on enleve 1 au le champ credit du compte des membres. en effet chaque jour coute un credit...

Le problème c'est que je n'arrive pas à trouver l'id des membres qui ne sont pas stockés dans la table credits. En effet si la mise à jour est effectuée pour un membre il ne faut pas que cela se refasse dans la journée.

Voici ùmon code :

$sql = "SELECT 
".$GLOBALS["table_membres"].".id
FROM ".$GLOBALS["table_membres"].",".$GLOBALS["table_credits"]."
WHERE ".$GLOBALS["table_membres"].".id!=".$GLOBALS["table_credits"].".id_membre
AND ".$GLOBALS["table_credits"].".date = DATE_FORMAT(NOW(),'%Y-%m-%d')";

$query = mysql_query($sql) or die("Erreur sur $sql :<br>".mysql_error());
while($data = mysql_fetch_array($query)){

// Mise à jour du champ credit
mysql_query("UPDATE ".$GLOBALS["table_membres"]." SET credit=credit-1 WHERE id='".$data["id"]."'") or die(mysql_error());

// Ajout dans la table
$new_date = date("Y-m-d");
mysql_query("INSERT INTO ".$GLOBALS["table_credits"]." VALUES('','".$data["id"]."','".$new_date."'") or die(mysql_error());

}


Le problème c'est que aucun champs n'est mise à jour et aucune entrée n'est faite dans la table credits.

Je sais qu'il y a un truc qui cloche dans la requete mais ej sais asp trop quoi...

Merci d'avance pour votre aide..
BornToBe
le 02/09/2004 à 17:02
BornToBe
Ecoute, j'ai pas regardé en détails ce que tu as mis, mais je pense que c'est dans la manière de procéder que tu pèches...
Au lieu de décrémenter au fur et à mesure, tu devrais mettre à jour les données avant l'affichage: au lieu de faire -1 chaque jour, tu prépare une requête qui vérifie depuis combien de temps il s'est inscrit en soustraiyant la date du jour à celle de l'inscription. Comme il y a un capital de départ, t'adapte les comptes en mettant le résultat de la soustraction. Voilà.

BTB
Nì heolas go haontìos
allserv
le 02/09/2004 à 19:16
allserv
Non car il peut recharger.

En fait dans la table credits est enregistré tous les jours l'id du membre et la date, cela veut dire que son compte à bien été mis à jour.

Cependant j'aurais souhaiter recuperer directement tous les membres qui ne s'ont pas dans cette table et dont la date est egal à la date du jour. Mais là ma requete plante....

Quelqu'un pourrait m'aider ?
moogli
le 03/09/2004 à 18:09
moogli
Salut,

as tu essayé ta requte dans phpmyadmin ?

Ce que j'ai compris :
tu utilise la table credit pour savoir quel est la dernière date a la quelle le changement de credit a été fait.

Pour sa moi je ferrais comme sa
Quand un membre visite la page
<?php
//$id contient l'id du membre
$sql='SELECT date FROM table_credit WHERE id_membre="'.$id.'"';
$req=mysql_query($sql);
if (mysql_num_rows($req)!=1) echo 'Problème';
$data = mysql_fetch_array($req);
if ($data['date']==date("Y-m-d"))
{
//On fait rien
}
else {
//tu fait l'update des tables
}
?>


DOnc en fait a chaque page visité par un membre le script va verifier si la date de dernière connection (dans la table_membre) et celle du jour si non update.

Je par du principe que n'auras aucun souci de date (par exemple une modif d'un tuple en 'reculant' la date pour avoir un jour de plus).

J'espère pas etre a coté de la plaque et que tu arrive a me comprendre @+
Il en faut peu pour être heureux !!!!!
allserv
le 03/09/2004 à 18:37
allserv
En fgait c'est pas trop ca mon raisonnement. Ce que je veux faire c'est que chaqque jour, chaque membre perd un credit. J'ai donc une table crédits avec l'id du membre et la date. Et maintenant je souhaiterais recuperer tous les membres qui ne font pas partie de la table credits et dont la date est celle du jour (tous les autres membres en fait)...

La je bloque...
moogli
le 03/09/2004 à 18:45
moogli
Ok autant pour moi smiley

Tu veut les membres qui sont dans membres et po dans credit ?

SELECT membre.id FROM membre,credit WHERE membre.id<>credit.id

d'apres ce que tu vient de dire dans la table credit tu n'a que d gens qui n'on pas la date du jour donc tu n'a pas besoin de la date ?

sinon montre un exemple la je patauge :)
Il en faut peu pour être heureux !!!!!
allserv
le 03/09/2004 à 22:17
allserv
La table crédits contient l'id du membre et la date de l'insertion qui permet de verifier si le meme a deja updater son compte ce jour ou pas...

En gros je souahite recuperer tous les id des membres de la table membres qui ne sont pas contenues dans la table crédits (champ id_membre) et dont la date correspond à celle du jour ?
allserv
le 04/09/2004 à 16:30
allserv
J'ai reussi à le faire mais en plusieurs requetes, j'aurais préféré récupéré directement les membres qui n'étaient pas dans la table credits, mais je n'y suis pas arrivé :

// Recuperation de la liste des membres
$sql_two = "SELECT id FROM ".$GLOBALS["table_membres"]." WHERE actif=1";
$query_two = mysql_query($sql_two) or die("Erreur sur $sql_two :<br>".mysql_error());
while($data_two = mysql_fetch_array($query_two)){

$sql = "SELECT COUNT(*) AS nbre FROM ".$GLOBALS["table_credits"]." WHERE id_membre='".$data_two["id"]."' AND date = DATE_FORMAT(NOW(),'%Y-%m-%d')";
$query = mysql_query($sql) or die("Erreur sur $sql :<br>".mysql_error());
$data = mysql_fetch_array($query);
$nbre = $data["nbre"];

if($nbre==0){
// Mise à jour du champ credit
mysql_query("UPDATE ".$GLOBALS["table_membres"]." SET credit=credit-1 WHERE id='".$data_two["id"]."'") or die(mysql_error());

// Ajout dans la table
$new_date = date("Y-m-d");
mysql_query("INSERT INTO ".$GLOBALS["table_credits"]." VALUES('','".$data_two["id"]."','".$new_date."');") or die(mysql_error());
}
}
bibi
le 04/09/2004 à 20:30
bibi
La table crédits contient l'id du membre et la date de l'insertion qui permet de verifier si le meme a deja updater son compte ce jour ou pas...

En gros je souahite recuperer tous les id des membres de la table membres qui ne sont pas contenues dans la table crédits (champ id_membre) et dont la date correspond à celle du jour ?

SELECT id FROM membres WHERE id NOT IN ( SELECT id_membre FROM credits )
AND date = DATE_FORMAT(NOW(),'%Y-%m-%d')



essaye cette rekete en changeant le nom des tables et tou et tout
commit suicide
allserv
le 05/09/2004 à 12:42
allserv
Mdr j'ai tester en fait cette requete avant que tu me la dise mais ce n'est pas possible encore avec les versions mysql actuelle il faut la 4.1 je crois non ? C'est une requete imbriquée et pour le moment pas possible...
Répondre
LoadingChargement en cours