#informatique Bot Logged User list

Network: Zeolia
Modes: +nrt
Last Seen: an hour ago
Topic: Canal d'aide informatique - Développement / Web / Windows - Pour les questions linux, rejoindre #linux
#3
Rank
11
Users

Channel Log Archive for #informatique

Prev
Next

* All times are UTC
Wednesday, September 21, 2022
[06:05:27] * CrazyCat[AFK] is now known as CrazyCat
[06:08:58] * PassiveIncomeGirl joined #informatique
[06:10:00] * PassiveIncomeGirl quit (Killed by CrazyCat (No))
[06:10:31] * PassiveIncomeGirl joined #informatique
[06:10:53] * PassiveIncomeGirl quit (Banned (Z-Lined): Suspicious bot)
[06:57:15] % Amand j'ai toujours pas pu résoudre mon problème de temps de chargement :/
[06:58:02] @ CrazyCat Commence par exécuter la requête dans phpmyadmin pour voir combien de temps elle met
[06:58:29] @ CrazyCat Si ça trouve, le souci est juste que ta page générée est lourde
[07:00:32] % Amand c'est la requête, j'ai tapé la requête, c'est encore entrain de chercher
[07:00:46] % Amand Affichage des lignes 0 - 99 (total de 100, traitement en 53.7362 seconde(s).)
[07:01:46] @ CrazyCat Essaye en virant ton DISTINCT id (count(*))
[07:04:06] @ CrazyCat Pis l'option "Explain" est pas mal pour voir un peu ce qui prend du temps
[07:04:49] % Amand Affichage des lignes 0 - 99 (total de 100, traitement en 52.2630 seconde(s).)
[07:05:56] % Amand je regarde ou se situe le explain
[07:06:38] @ CrazyCat En dessous de la requête, tu dois avoir un bouton "Expliquer"
[07:07:11] @ CrazyCat Un lien "Expliquer SQL"
[07:07:32] @ CrazyCat Sinon, tu ajoutes juste "EXPLAIN" au début de ta requête
[07:13:23] @ CrazyCat (tu devrais soit renommer le champ time soit le protéger avec des ``)
[07:16:10] % Amand ah oui
[07:16:13] % Amand SELECT COUNT(DISTINCT id) AS nbc, MAX(`time`) AS lasttime, codepays, nick, username, ip, host, realname, webirc, sslco, `time` FROM logsusers GROUP BY nick, username, ip ORDER BY lasttime DESC LIMIT 100
[07:16:24] @ CrazyCat Yep
[07:16:55] @ CrazyCat Tu peux tenter ta requête sans le order by pour voir ce que ça donne ?
[07:18:12] % Amand Affichage des lignes 0 - 99 (total de 100, traitement en 0.0080 seconde(s).)
[07:18:15] % Amand nettement mieux
[07:18:33] @ CrazyCat Ok, ça me semble logique
[07:18:52] @ CrazyCat Donc, j'ai une idée qui peut t'arranger
[07:19:29] @ CrazyCat Tu crées une vue à partir de cette dernière requête (sans le order donc, de toutes manières mysql te le refusera)
[07:19:55] @ CrazyCat (et sans le limit, idem)
[07:20:18] @ CrazyCat Et tu fais dans ton php la requête sur la vue en ajoutant ton order et ton limit
[07:23:56] % Amand je regarde ça
[07:25:43] % Amand si j'ai bien compris le truc
[07:25:54] % Amand CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY
[07:25:54] % Amand DEFINER VIEW stats_connex AS SELECT COUNT(DISTINCT id) AS nbc, MAX(`time`) AS lasttime, codepays, nick, username, ip, host, realname, webirc, sslco, `time` FROM logsusers GROUP BY nick, username, ip
[07:26:08] % Amand devrait crée la vue
[07:26:10] % Amand je test
[07:29:12] % Amand la vue est crée
[07:29:19] % Amand par contre la requête :
[07:29:31] @ CrazyCat Question con en passant: pourquoi tu récupères le champ time alors que tu as lasttime
[07:29:37] % Amand SELECT COUNT(DISTINCT id) AS nbc, MAX(`time`) AS lasttime, codepays, nick, username, ip, host, realname, webirc, sslco, `time` FROM stats_connex GROUP BY nick, username, ip ORDER BY lasttime DESC LIMIT 100
[07:29:42] @ CrazyCat Et qu'en toute logique c'est les mêmes
[07:29:50] % Amand me retourne une erreur :
[07:30:05] % Amand HP message: PHP Fatal error: Uncaught PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'id' in 'field list'
[07:30:33] % Amand pour time euhhh je sais plus pk j'avais laissé les deux
[07:30:45] % Amand je reprends le code donc y'a quelques détail qui m'échappe
[07:31:05] @ CrazyCat Ben oui, ta vue fait 90% du boulot, ta reqête change: SELECT * FROM stats_connex ORDER BY lasttime LIMIT 100
[07:31:20] % Amand ah ok !
[07:31:23] @ CrazyCat (remplace le * par les champs de la vue)
[07:31:24] % Amand ok je vois
[07:34:57] % Amand SELECT lasttime, codepays, nick, username, ip, host, realname, webirc, sslco, `time` FROM stats_connex ORDER BY lasttime LIMIT 100
[07:35:14] % Amand ça n'a pas l'air de passer
[07:35:47] @ CrazyCat Tente dans phpmyadmin
[07:36:11] @ CrazyCat (et encore une fois, pourquoi tu intègre time dans tes requêtes ?)
[07:36:27] % Amand je vais le retiré
[07:36:29] % Amand er
[07:39:00] % Amand j'ai le même souci
[07:39:07] % Amand du temps de latence
[07:39:15] % Amand chargement*
[07:40:18] @ CrazyCat Tu peux faire un expliquer SQL stp ?
[07:42:12] @ CrazyCat Hum, c'est bizarre que ta vue ait autant de lignes que ta table principale
[07:43:18] @ CrazyCat Tu peux me montrer un peu de contenu de ta vue stp ?
[07:46:24] @ CrazyCat Ok, donc déjà je te conseille de refaire ta vue en virant time et en ajoutant id (qui peut être utile)
[07:46:40] @ CrazyCat Heu non
[07:46:49] @ CrazyCat id c'est juste un auto incrément ?
[07:47:24] % Amand time est utile quand j'insère une première connexion dans la base de donnée, vu que je retire les doublons, le lasttime sert à mettre le dernier timestamp
[07:47:29] % Amand oui id est un auto incr
[07:47:46] % Amand enfin je regroupe les doublons plutôt
[07:48:20] @ CrazyCat oki, donc id ne sert à rien dans la vue (j'ai cru 2 minutes que c'était l'id utilisateur)
[07:48:45] % Amand time est important si je le retire, quand il y a qu'une seule connexion, il me met 1/1/1970
[07:48:47] % Amand dans la date
[07:48:48] @ CrazyCat Mais time dans ta vue ne sert à rien
[07:49:52] @ CrazyCat dans ta vue, il te donne juste une des connexions de ce qui a été groupé
[07:50:35] @ CrazyCat (même si ça n'a aucun rapport avec ton souci de perfs)
[07:50:53] % Amand ok je le retire de la vue
[07:50:58] % Amand parce quand dans mon php
[07:51:06] % Amand SELECT nbc, lasttime, codepays, nick, username, ip, host, realname, webirc, sslco, time FROM stats_connex ORDER BY lasttime LIMIT 100
[07:51:19] % Amand ça corrige le problème du 1/1/1970
[07:52:57] @ CrazyCat Dans title="<?=date("G:i:s",strtotime($Logs['lasttime'])); ?>"><?=date("j/n/Y",strtotime($Logs['time'])); ?> ?
[07:53:07] @ CrazyCat utilise lasttime plutôt que time
[07:53:55] % Amand hm déjà j'ai fait une bêtise, j'ai crée la vue dans le root alors que je suis sous amandweb
[07:54:54] % Amand j'ai mis au début :
[07:54:55] % Amand CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY
[07:55:15] @ CrazyCat C'est pas génant ça
[07:56:33] % Amand ok
[07:56:58] % Amand par contre j'arrive pas à retrouver ma vue dans phpmyadmin pour modif la requête
[07:57:02] % Amand je fouille un peu
[07:58:07] @ CrazyCat Normalement dans la colonne de gauche (rafraichit la page) tu dois avoir dans ta bases une arbo
[07:58:15] @ CrazyCat et dedans tu as tables et vues
[07:58:53] % Amand c bon j'ai trouvé
[08:02:03] % Amand je vais recrée ma vue au propre
[08:02:12] % Amand CREATE ALGORITHM=UNDEFINED DEFINER=`amandweb`@`localhost` SQL SECURITY
[08:02:12] % Amand DEFINER VIEW stats_connex AS SELECT COUNT(DISTINCT id) AS nbc, MAX(`time`) AS lasttime, codepays, nick, username, ip, host, realname, webirc, sslco FROM logsusers GROUP BY nick, username, ip
[08:05:48] % Amand il a pas l'air d'apprecié :
[08:05:49] % Amand SELECT nbc, lasttime, codepays, nick, username, ip, host, realname, webirc, sslco FROM stats_connex ORDER BY lasttime LIMIT 100
[08:06:16] % Amand j'ai eu une connexion time out
[08:06:21] % Amand la requête doit être trop grosse
[08:06:30] % Amand en ressource
[08:06:42] @ CrazyCat Ben non, c'est la même que tout à l'heure
[08:06:57] % Amand oui là elle est passé
[08:07:05] % Amand Affichage des lignes 0 - 99 (total de 100, traitement en 56.3495 seconde(s).) [lasttime: 2022-06-19 20:40:13... - 2022-06-19 20:45:08...]
[08:07:21] @ CrazyCat Mouais mouais mouais
[08:07:42] @ CrazyCat Ton champ time, c'est un timestamp ?
[08:08:18] % Amand non datetime
[08:09:04] @ CrazyCat ok
[08:10:31] @ CrazyCat Pourquoi il y a le ON UPDATE ?
[08:11:15] % Amand pour mettre l'heure actuelle lors de l'insertion
[08:11:38] % Amand j'avas vu ça dans un tuto
[08:12:32] @ CrazyCat Ben tu as déjà la valeur par défaut
[08:13:03] @ CrazyCat Cet extra sert à mettre à jour la valeur si tu fais une action sur l'enregistrement
[08:13:37] @ CrazyCat C'est utilisé par exempe pour un champ de type "date de dernière modification"
[08:14:03] @ CrazyCat Mais *jamais* pour du log qui ne doit surtout pas être modifié
[08:15:08] % Amand ok donc je met UNSIGNED
[08:15:19] % Amand je sais plus c'était quelle valeur par défaut
[08:15:21] @ CrazyCat Non, tu ne mets rien
[08:15:31] % Amand ok
[08:15:34] @ CrazyCat Par défaut ce champ est vide
[08:15:41] % Amand c'est fait
[08:25:02] % Amand je reviens dans quelques minutes
[08:46:22] @ CrazyCat Bon, j'ai l'explication pour le ralentissement, mais pas la solution
[08:47:02] @ CrazyCat Quand tu fais un order by, MySQL est obligé de lire tous les enregistrements, donc forcément au bout d'un moment ça coince
[09:30:02] % Amand re
[09:30:45] % Amand hm ok
[09:39:21] @ CrazyCat Après, il y a un autre truc, tu as peut-être mis trop d'index
[09:39:39] @ CrazyCat Plus tu mets des index plus mysql à des données à lire
[09:41:20] % Amand hm je devrais retirer quel index?
[09:47:51] @ CrazyCat Tout dépend de ce à quoi te sert ta table en plus de cette requête
[09:49:41] % Amand elle sert juste à lire les données de la base
[09:49:49] % Amand dans ma page search pareil
[09:50:21] @ CrazyCat Dans ta page search, tu peux chercher sur quoi ?
[09:52:31] % Amand $words[$index] = "ip LIKE '{$word}' OR nick LIKE '{$word}' OR username LIKE '{$word}' OR host LIKE '{$word}' OR realname LIKE '{$word}'";
[09:53:17] % Amand ip , nick , username , host , realname
[09:55:56] @ CrazyCat tu dois pouvoir virer celui sur realname et sur host
[09:56:24] @ CrazyCat Et il faudrait que tu essayes dans phpmyadmin:
[09:56:52] @ CrazyCat select d.* from (SELECT COUNT(DISTINCT id) AS nbc, MAX(`time`) AS lasttime, codepays, nick, username, ip, host, realname, webirc, sslco FROM logsusers GROUP BY nick, username, ip) as d order by d.lasttime
[09:57:03] % Amand ok
[09:57:24] @ CrazyCat Un index sur time par contre
[09:59:05] @ CrazyCat D'après mes tests, la dernière requête que je t'ai donnée n'optimise rien :D
[09:59:34] % Amand ça charge toujours x)
[10:01:32] % Amand Affichage des lignes 0 - -1 (total de 0, traitement en 52.1294 seconde(s).) [lasttime: 2022-06-19 20:40:13... - 2022-06-19 20:41:15...]
[10:02:27] @ CrazyCat Oui, je ne vois pas quelle solution utiliser
[10:06:51] % Amand quand on défini pas de order by dans une requête
[10:07:14] % Amand y'a un tri par défault ?
[10:07:59] @ CrazyCat Normalement, par l'id auto incrément, mais dans le cas d'un group by, je ne sais pas
[10:15:00] % Amand oki
[10:15:38] % Amand j'ai une problématique sur une requête
[10:15:42] % Amand SELECT COUNT(*) AS nbMessages FROM logsusers WHERE {$wordSql}
[10:16:16] % Amand enfin
[10:16:21] % Amand SELECT COUNT(*) AS nbMessages FROM logsusers
[10:16:28] % Amand va me retourner: 3108765
[10:16:56] % Amand hm non
[10:17:14] % Amand bon je vais chercher un peu de mon côté je re
[10:17:32] @ CrazyCat Pour l'instant je ne vois pas ton souci :)
[10:21:20] % Amand j'ai pas envie de te prendre trop la tête, c'est un peu casse tête
[10:21:39] % Amand j'ai deux requêtes, la deuxieme qui fait un DISTINCT
[10:22:00] % Amand et la premiere non, c'est à dire : SELECT COUNT(*) AS nbMessages FROM logsusers WHERE {$wordSql}
[10:22:30] % Amand ça va fausser la pagination
[10:22:46] % Amand ( c'est ma partie search )
[10:22:59] @ CrazyCat La première te sort le nombre total de messages
[10:23:29] @ CrazyCat La seconde n'a rien à voir avec la 1ère
[10:25:16] % Amand c'est un peu délicat à expliquer, je vais faire ça étape par étape :
[10:25:35] @ CrazyCat La première, tu veux t'en servir juste pour la pagination ?
[10:25:56] % Amand donc quand je fais un : SELECT * FROM `logsusers` WHERE nick LIKE "test01" il me retourne bien total de 383
[10:26:51] % Amand la pagination est bonne vu qu'il m'affiche : https://imgur.com/rNPgfVV.png
[10:27:04] % Amand / Permet de définir le nombre de messages par page
[10:27:04] % Amand $maxParPage = 100;
[10:27:22] % Amand j'ai limité à 100 réponse par page donc on est bon, par contre, j'ai seulement 5 résultats
[10:27:54] @ CrazyCat Ben oui, vu que sur la 2ème tu as du groupage
[10:29:20] % Amand l'inconvénient quand tu fais un script et tu reviens dessus un mois ou deux après
[10:29:27] % Amand tu ne sais plus pk tu as fait ci ou ca
[10:30:17] @ CrazyCat Tu as une requête qui compte toute les lignes, et une qui te sort un résumé.
[10:30:42] @ CrazyCat Je pense que la somme des nbc de la 2ème requête fait 333
[10:32:57] @ CrazyCat Le premier truc que tu devrais faire, c'est écrire noir sur blanc (et sans penser au code) à ce que tu veux faire sur ta page
[10:36:04] % Amand ah mais non enfaite c'est bon pour le résultat
[10:36:45] % Amand j'ai 5 résultats mais ça fait bien 383 : https://imgur.com/HRivNhd.png
[10:37:09] % Amand c'est la pagination qui est pas bonne, il me met 4 pages alors qu'il devrait en mettre qu'une
[10:39:59] % Amand / On récupère le nombre de messages
[10:39:59] % Amand $reqCount = $bdd->prepare("SELECT COUNT(*) AS nbMessages FROM logsusers WHERE {$wordSql}");
[10:40:20] % Amand je dois modif la requête pour qu'il prenne pas en compte les doublons
[10:40:36] % Amand et m'afficher 5
[10:40:43] % Amand du coup ma deuxieme requête est bonne
[10:40:55] @ CrazyCat Attends, j'essaye de te faire ça plus propre
[10:41:13] % Amand je te te montre la page en globalité
[10:43:27] % Amand dsl pour l'indent
[10:45:45] @ CrazyCat Tu as 2 fois la même requête dans ta page ?
[10:46:03] @ CrazyCat Ligne 11 et ligne 49
[10:47:22] % Amand oui c'est un doublon, je comptais le retirer
[10:47:46] % Amand tu l'as vu direct, je m'en suis rendu compte que ce matin que j'avais fait un doublon
[10:48:08] @ CrazyCat Jette un oeil à ce que j'ai fait de ta page :)
[10:52:06] % Amand parfait ! là c'est impec
[10:52:26] % Amand le seul problème, c'est le temps de chargement
[10:52:46] % Amand il met pratiquement une minute c'est énorme
[10:53:36] % Amand merci CrazyCat
[10:54:15] @ CrazyCat Ah ben ça, vu le nombre de lignes, le order fatigue bien
[10:54:41] @ CrazyCat Après, as-tu besoin de garder autant de lignes ?
[10:55:20] % Amand j'ai une petite erreur
[10:55:34] @ CrazyCat C'est possible
[10:55:35] % Amand sur une recherche avec plusieurs pages
[10:55:38] % Amand FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'
[10:56:53] @ CrazyCat C'est ta table: tes champs n'ont pas le même interclassement
[10:57:24] @ CrazyCat tu as du mix utf8 et utf8mb4
[10:58:46] % Amand pourtant ils ont le même interclassement
[11:01:03] @ CrazyCat C'est bizarre ça
[11:01:46] % Amand apparemment c'est ma ligne 19
[11:01:54] @ CrazyCat Et ta table elle-même ?
[11:01:57] % Amand # Nombre de client enregistré dans la bdd
[11:01:57] % Amand $reqCount = $bdd->prepare("SELECT COUNT(*) AS nbMessages FROM logsusers WHERE {$wordSql}");
[11:01:58] % Amand $nbMessages = intval($reqCount->fetch()['nbMessages']);
[11:01:58] % Amand $reqCount->execute();
[11:02:04] % Amand au niveau du execute()
[11:02:15] % Amand ma requete qui fait doublon
[11:02:22] @ CrazyCat Ah mais faut la virer
[11:04:25] % Amand maintenant il me dit ligne 68 qui correspond à :
[11:04:44] % Amand # Requête qui permet de mettre en mémoire le nombre total de lignes concernées
[11:04:44] % Amand $reqLogs = $bdd->prepare("SELECT SQL_CALC_FOUND_ROWS COUNT(DISTINCT id) AS nbc, MAX(time) AS lasttime, codepays, nick, username, ip, host, realname, webirc, sslco FROM logsusers WHERE {$wordSql} GROUP BY nick, username, ip ORDER BY lasttime DESC LIMIT :start, :offset");
[11:04:44] % Amand $reqLogs->bindValue(':offset', $maxParPage, PDO::PARAM_INT);
[11:04:44] % Amand $reqLogs->bindValue(':start', $start, PDO::PARAM_INT);
[11:04:44] % Amand $reqLogs->execute();
[11:04:49] % Amand à l'execute de cette requête
[11:04:55] @ CrazyCat Regarde l'interclassement de ta table
[11:05:01] % Amand ok
[11:06:03] % Amand Interclassement utf8mb4_general_ci
[11:06:58] @ CrazyCat Dans le doute, va dans les opérations de la table, et dans les options, tu coches "Changer le classement de toutes les colonnes" et tu exécutes
[11:12:24] @ CrazyCat Et un autre truc: c'est peut-être le contenu de ta recherche qui pose problème
[11:12:51] @ CrazyCat Quand tu définis ta connexion à la base, ajoute ;charset=utf8mb4 après le nom de la base
[11:13:14] @ CrazyCat Ca forcera PDO à utiliser le bon jeu de caractères
[11:16:14] % Amand yes c'est effectivement le contenu de ma recherche, il a pas l'air d'apprecié le %
[11:16:39] % Amand je vais tenter, ta motif
[11:18:01] @ CrazyCat le % qui est dans le like ?
[11:18:17] @ CrazyCat Ton php est bien en utf8 ?
[11:20:26] % Amand oui ça a l'air bon maintenant je continue mes tests
[11:27:06] % Amand j'ai plus d'erreur mais quand je vais sur la page 2 le tableau est vide
[11:29:32] @ CrazyCat Tu as combien de résultats ?
[11:30:41] @ CrazyCat Et tes liens sont bons dans la pagination ?
[11:32:00] % Amand normalement oui
[11:32:05] % Amand je te dis le résultat now
[11:34:19] % Amand premiere page : 471375 , deuxieme page 0
[11:36:04] @ CrazyCat Et tu as bien le paramètre de recherche dans l'url ?
[11:37:14] % Amand oui
[11:37:34] % Amand ?search=%abo.wanadoo.fr&page=2
[11:40:55] @ CrazyCat Mais avec page=1 ça marche ?
[11:41:18] @ CrazyCat Ou bien ça ne marche que quand il n'y a pas page= ?
[11:46:51] % Amand je test
[11:48:23] % Amand oui même page=1 ne fonctionne pas
[11:48:34] % Amand il me retourne 0 et un tableau vide
[11:52:14] @ CrazyCat fait un echo de de $page et de $word
[11:55:30] % Amand bb
[11:55:35] % Amand brb*
[11:56:43] @ CrazyCat Tu peux m'appeler bb mais je risque de pas répondre :D
[14:12:57] * ozswar joined #informatique
[14:15:30] @ CrazyCat Salut ozswar
[14:17:37] * Amand quit (Quit: Connection closed for inactivity)
[14:30:37] * ozswar quit (Ping timeout: 180 seconds)
[14:58:14] * ozswar joined #informatique
[15:01:31] * ozswar quit (Ping timeout: 180 seconds)
[15:21:20] * ozswar joined #informatique
[17:27:21] * Amand joined #informatique
[17:27:21] * [Guru] set mode +h Amand
[17:27:46] * ozswar left #informatique
Prev
Next