[RESOLU] Affichage anticipé

Eléphant du PHP | 256 Messages

27 mai 2016, 16:55

Si c'est avec le = c'est que tu fais un trim lorsque tu alimentes $Userid et que le trim nettoie entre autre les retours chariot.
Oui mais trim dans la version que j'essaye de faire fonctionner aussi alors pourquoi ça trimme pas ?

Avatar du membre
Mammouth du PHP | 1609 Messages

27 mai 2016, 16:59

Le trim php et le trim mysql c'est pas la même chose, j'imagine qu'ils ne fonctionnent pas de la même manière. A regarder dans les documentations respectives.

A priori de base le trim mysql ne supprime que les espaces.
http://dev.mysql.com/doc/refman/5.7/en/ ... ction_trim

Tu pourrais essayer trim("\r" FROM rlog.Userid) = trim("\r" FROM rusers.Userid) et autres variantes (le \n ou le \r\n ou des trim en cascade).

Apparemment il serait peut être même possible d'avoir une clause de jointure utilisant le LIKE... (recherche "mysql join like")
Développeur web depuis + de 20 ans

Eléphant du PHP | 256 Messages

28 mai 2016, 10:51

Bonjour,
Il me semble qu'au lieu d'essayer d'ignorer les cr/lf présents dans la table il vaudrait mieux corriger la table, ensuite le join devrait fonctionner.
Pas de problème pour les nouveaux enregistrements.
Quelle est la méthode la plus simple de corriger la table sachant que je ne devrai le faire qu'une seule fois ?

Mammouth du PHP | 1029 Messages

28 mai 2016, 15:06

Bonjour,
Alors dans un premier temps il faut faut faire un backup de la db (export complet avec PhpMyAdmin).
Pour être sur que ce backup est bon, on le remonte dans une nouvelle db et on va travailler sur cette nouvelle db.

Le backup est fait ?

Tu es sûr ?

Ok

alors une ligne de genre devrais régler ton souci, a appliquer sur les différentes lignes qui pose soucis :

Code : Tout sélectionner

UPDATE RVRTlog SET Userid = REPLACE(Userid, '\\r\\n', '' )
L'expérience est la somme de toutes nos erreurs.

Eléphant du PHP | 256 Messages

28 mai 2016, 17:38

et

Code : Tout sélectionner

UPDATE RVRTlog SET Userid = TRIM(Userid)
?

Mammouth du PHP | 1029 Messages

28 mai 2016, 17:42

Oui, cela devrais mettre tout d’équerre, faut le faire sur tout les champs qui posent soucis.
Fais le bien sur ta db de bakup, car le retour en arrière en cas d'erreur ne sera pas possible.

Après normalement tout devrais être bon.
L'expérience est la somme de toutes nos erreurs.

Eléphant du PHP | 256 Messages

29 mai 2016, 10:03

Bonjour,
Voilà, j'ai corrigé les tables (trim sur les derniers champs qui contenaient des /r/n); le code ci-dessous fonctionne; la durée d'exécution est passée de 15 à 8 secondes ce qui est déjà beaucoup mieux mais dans 6 mois la taille de la table log aura doublé, le temps d'affichage aussi, il faudra trouver autre chose.

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 LEFT 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>";
J'ai quand même encore un problème : MyphpAdmin n'effectue ceci que sur les 30 premières lignes !?!

Code : Tout sélectionner

UPDATE RVRTlog SET Userid = TRIM(Userid)

Mammouth du PHP | 1029 Messages

29 mai 2016, 10:40

Remplace le LEFT JOIN par un INNER JOIN
L'expérience est la somme de toutes nos erreurs.

Eléphant du PHP | 256 Messages

29 mai 2016, 10:44

Remplace le LEFT JOIN par un INNER JOIN
Pourquoi ?

Et MyphpAdmin ajoute d'office LIMIT 0 , 30 !

Mammouth du PHP | 1029 Messages

29 mai 2016, 10:52

Parce que le LEFT JOIN recherche même les lignes non remplie, tandis que le INNER JOIN retourne que ce qui correspond, donc gain de performance. Normalement le update n'as pas d'impact sur le limit. Si tu fais un select alors tu peux augmenter le limit
L'expérience est la somme de toutes nos erreurs.

Eléphant du PHP | 256 Messages

29 mai 2016, 11:00

Parce que le LEFT JOIN recherche même les lignes non remplie, tandis que le INNER JOIN retourne que ce qui correspond, donc gain de performance.
Elles sont toutes remplies.

Mammouth du PHP | 1029 Messages

29 mai 2016, 11:03

Raison de plus pour utiliser le INNER JOIN alors, c'est cartésien, pas besoin de recherche sur les vides.
Ha oui et rien ne dit que si tu double la table, que le temps de réponses sera doublé
L'expérience est la somme de toutes nos erreurs.

Eléphant du PHP | 256 Messages

29 mai 2016, 11:30

OK j'ai remplacé LEFT par INNER.
Maintenant je ne vois plus que les 33 premières lignes de la table et ça n'a rien à voir avec un LIMIT.
En fait je vois la table depuis qu'elle est remplie correctement (hier à 10h45).
L'UPDATE ne fonctionne pas du tout
UPDATE RVRTlog SET Userid = TRIM(Userid) ==> 0 rows affected
Dump : ('151021', '151023122219', '151023', 'Log Book', 'Hervé-PRD\r\n')
J'ai toujours les \r\n
idem avec UPDATE RVRTlog SET Userid = REPLACE(Userid, '\\r\\n', '' )

Eléphant du PHP | 256 Messages

30 mai 2016, 10:03

Bonjour,
Pour info j'ai supprimé les \r\n sur la version exportée simplement avec le bloc note de Windows avant de l'importer à nouveau dans ma db.
Tout fonctionne correctement maintenant, et puisque les nouveaux enregistrements ne comporteront plus ces cr lf intempestifs ...

Un grand merci pour votre aide.

Mammouth du PHP | 1029 Messages

30 mai 2016, 10:15

Juste un dernier truc, autant allez jusqu'au bout :)
Comme si j'ai bien lu il y a 8500 lignes de tableau, autant éviter de faire lire le html par PHP, tu peux donc écrire ceci :

Code : Tout sélectionner

<?php while ($result = mysql_fetch_array($results)) : ?> <tr> <td> <?php echo $result['date_jour'] ?> </td> <td> <?php echo $result['heure_jour'] ?> </td> <td> <?php echo $result['Version'] </td> <td> <?php echo $result['Module'] ?> </td> <td> <?php echo $result['Userid'] </td> <td> <?php echo $result['Prenom'] ?> </td> <td> <?php echo $result['Nom'] </td> <td> <?php echo $result['Email'] </td> </tr> <?php endwhile; ?>
Mon exemple prend en compte que tu aurais fermé les balises php avant le while.
L'expérience est la somme de toutes nos erreurs.