[RESOLU] Affichage anticipé

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Affichage anticipé

Re: Affichage anticipé

par Herve_be » 03 août 2016, 09:58

Essaye en mettant ton WHERE après ton JOIN
Je n'avais même pas essayé car je croyais que l'ordre des éléments d'un select n'avait pas d'importance, mais ça fonctionne, merci beaucoup.

Re: Affichage anticipé

par Spols » 03 août 2016, 07:40

Essaye en mettant ton WHERE après ton JOIN

Re: Affichage anticipé

par Herve_be » 01 août 2016, 17:15

Bonjour,
Tout fonctionne toujours bien mais le listing devient inutilement long, je voudrais le limiter au dernier mois.
Je vous rappelle le select

Code : Tout sélectionner

$results = mysql_query("SELECT rlog.Userid as 'Userid', DATE_FORMAT(rlog.Timestamp , '%d/%m/%Y') as 'date_jour', DATE_FORMAT(rlog.Timestamp , '%T') as 'heure_jour', rlog.Version, rlog.Module, rusers.Prenom, rusers.Nom, rusers.Email FROM RVRTlog as rlog INNER JOIN RVRTusers as rusers ON rlog.Userid = rusers.Userid ORDER BY rlog.Timestamp DESC ");
j'ai ajouté avant le JOIN
WHERE rlog.Timestamp > (NOW() - INTERVAL 1 MONTH)
mais je reçois cette erreur que je ne comprends pas
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INNER JOIN RVRTusers as rusers ON rlog.Userid = rusers.Userid ORDER BY rlog.Time' at line 5

Merci d'avance pour votre aide.

Re: Affichage anticipé

par Herve_be » 26 juin 2016, 17:22

Bonjour,
Je suppose que le Select est devenu trop volumineux car j'ai l'erreur suivante
The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET MAX_JOIN_SIZE=# if the SELECT is okay

Pouvez-vous me dire comment et où je dois ajouter cette instruction SET SQL_BIG_SELECTS=1 ?
J'ai essayé mais j'ai une erreur de syntaxe.
Merci

Re: Affichage anticipé

par Maitrepylos » 02 juin 2016, 10:59

Nop, après tests sur mes propres données en faisant un distinct sur la date j'ai bien les utilisateurs différents aux même dates;

2008-10-02 2
2008-10-02 15
2008-10-02 19

Re: Affichage anticipé

par Herve_be » 02 juin 2016, 10:44

Non parce que tu ne sélectionnes que les dates différentes.
Si plusieurs utilisateurs utilisent le logiciel le même jour tu n'auras qu'une ligne.
Il faudrait quelque chose comme
SELECT DISTINCT(DATE_FORMAT(rlog.Timestamp , '%T') as 'heure_jour' AND rlog.Userid as 'Userid')

Re: Affichage anticipé

par Maitrepylos » 02 juin 2016, 10:37

Ok, donc ceci devrais correspondre, a vérifier ,

Code : Tout sélectionner

SELECT DISTINCT(DATE_FORMAT(rlog.Timestamp , '%d/%m/%Y')) as 'date_jour', rlog.Userid as 'Userid', DATE_FORMAT(rlog.Timestamp , '%T') as 'heure_jour',rlog.Version,rlog.Module,rusers.Prenom,rusers.Nom,rusers.Email FROM RVRTlog as rlog INNER JOIN RVRTusers as rusers ON rlog.Userid = rusers.Userid ORDER BY rlog.Timestamp DESC

Re: Affichage anticipé

par Herve_be » 02 juin 2016, 10:24

Si j'ai un Userid identique mais un timestamp différents alors il faut afficher les deux lignes ?
Ben oui, c'est un log d'utilisation du logiciel, ce cas signifie qu'un même utilisateur a utilisé le logiciel à 2 moments différents, donc on compte 2 utilisations.

Code : Tout sélectionner

$PrevDate=""; $PrevTime=""; $PrevUser=""; while ($result = mysql_fetch_array($results)) { $Date=$result['date_jour']; if($PrevDate <> "" AND $Date <> $PrevDate) { echo "<tr><td colspan=8></td></tr>"; // Une ligne de tableau vide quand on change de date } $PrevDate=$Date; if($PrevTime<>$result['heure_jour'] OR $PrevUser<>$result['Userid']) // Evite les doublons de la table Users { echo "<tr><td>" . $Date . "</td><td>" . $result['heure_jour'] . "</td><td>" . $result['Version'] . "</td><td>" . $result['Module'] . "</td>"; echo "<td>" . $result['Userid']."</td><td>" . $result['Prenom'] . "</td><td>" . $result['Nom'] . "</td><td>" . $result['Email'] . "</td></tr>"; } $PrevTime=$result['heure_jour']; $PrevUser=$result['Userid']; }

Re: Affichage anticipé

par Maitrepylos » 02 juin 2016, 10:21

Si j'ai un Userid identique mais un timestamp différents alors il faut afficher les deux lignes ?

Re: Affichage anticipé

par Herve_be » 01 juin 2016, 12:23

Il n'est pas possible d'éviter d'afficher ces deux lignes, la seule façon est des les retrouver et de les supprimer.
Il suffit de vérifier si 2 lignes successives sont identiques (même timestamp, même userid).
Plus précisément n'afficher une ligne que si timestamp ou userid est différent de la ligne précédente.

Re: Affichage anticipé

par Herve_be » 30 mai 2016, 17:01

Ce sont des fichiers texte .pwd
qui contiennent un seul record date;userid;prenom;nom;email

Code : Tout sélectionner

$dir = opendir("Users"); while($file = readdir($dir)) { if(substr($file,-3)=="pwd") { $myfile = fopen("Users/".$file, "r") or die("Unable to open file!"); $Record = fgets($myfile); $Sep1=strpos($Record,";"); $Sep2=strpos($Record,";",$Sep1+1); $Sep3=strpos($Record,";",$Sep2+1); $Sep4=strpos($Record,";",$Sep3+1); $Date = substr($Record,0,$Sep1); $Userid = substr($Record,$Sep1+1,$Sep2-$Sep1-1); $Prenom = substr($Record,$Sep2+1,$Sep3-$Sep2-1); $Nom = substr($Record,$Sep3+1,$Sep4-$Sep3-1); $Email = trim(substr($Record,$Sep4+1)); mysql_query("INSERT INTO RVRTusers (Dates, Userid, Prenom, Nom, Email) VALUES ('$Date', '$Userid', '$Prenom', '$Nom', '$Email')") or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); fclose($myfile); unlink("Users/".$file); echo "<br>Enregistré : ".$Date." ".$Userid; } }
Remarque que j'ai ajoute "trim" à la ligne $Email = trim(substr($Record,$Sep4+1));
afin de supprimer lf/cr.

Ceci étant je ne vois pas pourquoi il faudrait modifier ce script.

Re: Affichage anticipé

par Maitrepylos » 30 mai 2016, 16:48

Non, je parlais celui de l'enregistrement en db

Re: Affichage anticipé

par Herve_be » 30 mai 2016, 16:44

Tu peux ouvrir un autre post avec cette problématique et fournir le code.
Le code est celui auquel on est finalement arrivé pour réduire le temps d'affichage, objet de ce post, à savoir

Code : Tout sélectionner

$results = mysql_query(" SELECT rlog.Userid as 'Userid',DATE_FORMAT(rlog.Timestamp , '%d/%m/%Y') as 'date_jour', DATE_FORMAT(rlog.Timestamp , '%T') as 'heure_jour',rlog.Version,rlog.Module,rusers.Prenom,rusers.Nom,rusers.Email FROM RVRTlog as rlog INNER JOIN RVRTusers as rusers ON rlog.Userid = rusers.Userid ORDER BY rlog.Timestamp DESC "); while ($result = mysql_fetch_array($results)) { echo "<tr><td>" . $result['date_jour'] . "</td><td>" . $result['heure_jour'] . "</td><td>" . $result['Version'] . "</td><td>" . $result['Module'] . "</td>"; echo "<td>" . $result['Userid']. "</td><td>" . $result['Prenom'] . "</td><td>" . $result['Nom'] . "</td><td>" . $result['Email'] . "</td></tr>";

Re: Affichage anticipé

par Maitrepylos » 30 mai 2016, 16:38

Ton truc me semble un peu compliqué..soit.
Dans ton script php, tu pourrais d'avoir faire une requête pour voir si le userid existe, si oui tu passes, sinon tu insères.

Tu peux ouvrir un autre post avec cette problématique et fournir le code.

Re: Affichage anticipé

par Herve_be » 30 mai 2016, 16:33

la question est de savoir comment ils ont pu s'inscrire deux fois avec le même Usrerid
Ce n'est pas compliqué : l'inscription a lieu en VB6; je n'ai pas trouvé comment insérer un enregistrement MySQL en VB6; alors le programme VB6 crée un fichier sur mon serveur; "de temps en temps" un script php récupère les fichiers et injecte les enregistrement en MySQL.
VB6 ne peut pas vérifier qu'il y a des doublons et MySQL ne le fait pas puisqu'il n'est pas maître (il est trop tard pour dire à l'utilisateur que le Userid existe déjà); en fait ça m'est égal qu'il y ait des doublons de Userid parce que
  • si c'est un vrai doublon (même userid, même nom, même prénom, même mail) peu importe qu'il soit inscrit 2 fois
  • si c'est un faux doublon (même userid mais au moins un des autres champs différents) alors ce sont vraiment 2 personnes différentes même si elles ont le même userid.
La seule chose qui me dérange est que le script de statistique compte que tel module a été utilisé 2 fois au même moment par le même userid alors qu'il n'a été utilisé qu'une fois.