|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Développeur Web Inscription : juillet 2011 Messages : 13 ![]() |
Bonjour,
Tout d'abord un grand merci à ceux qui font ce forum, à ceux qui l'entretiennent et à ceux qui passent pour aider les autres.... Voilà mon problème, j'ai une requête ci-dessous qui fonctionne parfaitement Code :
J'aimerais faire le contraire, c'est à dire savoir quels produits sont dans ma table du jour mais ne sont pas dans ma table de la veille et donc en déduire les nouveaux produits (via leur id qui est unique > référence produit) Par rapidité, je fait donc : Code :
plantage phpMyAdmin, processus mysql : 99% de mon UC je suis obligé (avec beaucoup de mal) de redémarrer les services de wamp (v2) afin que l'execution s'annule et que je puisse retravailler correctement... MA CONFIG : Windows 7 (32b) - LocalHost (wamp 2.0) - root Version Serveur : 5.1.36 communitylog - UTF8 - root Apache/2.2.11 - PHP/5.3.0 - extension musqli Mysqlnd 5.0.5-dev 081106 $Revision : 1.3.2.27 $ phpMyAdmin version: 3.3.9 Voilà voilà je pense avoir fait le tour en espérant que quelqu'un puisse m'aider sur cette requête... Merci |
||||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
Saluton,
Tout d'abord j'espère que les hostilités de la guerre des étoiles ne sont pas ré-ouvertes par cette requête. Ensuite, pourquoi ne pas simplement inverser, dans la 1ère requête, le LEFT JOIN par un RIGHT JOIN et tester la nullité WHERE N1.id IS NULL ?
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Développeur Web Inscription : juillet 2011 Messages : 13 ![]() |
Merci pour cette suggestion, Je viens de tester ça avec :
Code :
La mauvaise c'est que je n'est pas de résultat retourné Hors, en vérifiant à l'instant, j'ai bien un produit avec un id (707515) qui est dans mesProduitsDuJour mais pas dans mesProduitsDeLaVeille (à vrai dire, j'en ai 3 pour mon test) En ce qui concerne le '*' de mon SELECT pour le coup il est vraiment utile (car ce n'est pas pour un site) mais une mini application qui affiche les différences (ajoutés, supprimés, modifiés) entre 2 bases, et ce tous les jours. Une intervention humaine est nécessaire derrière pour agir justement sur la base du site en fonction des résultats affichés de cette "appli" et la personne doit voir toutes les informations des produits trouvés, car parfois seul 1 colonne sur 25 a changé... Merci de ta réponse |
||
|
|
00
|
|
|
#4 | ||
|
Invité de passage
![]() Développeur Web Inscription : juillet 2011 Messages : 13 ![]() |
Je rajoute à cela que je viens de tester ceci :
Code :
et là, erreur mysql (très long) puis #2006 - MySQL server has gone away Juste pour info... PS : chaque base contient environ 12000 produits et 25 colonnes |
||
|
|
00
|
|
|
#5 | |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
Citation:
Pour en revenir à la problématique de départ Code sql :
FROM mesProduitsDuJour N LEFT JOIN mesProduitsDeLaVeille N1 ON N.id = N1.id WHERE N1.id IS NULL
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Développeur Web Inscription : juillet 2011 Messages : 13 ![]() |
Re,
Je viens de retester cette requête, Mais malheureusement, Mysql rame et après quelques longues minutes : #2006 - MySQL server has gone away |
|
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
Quelle est la taille des tables (nb lignes) ?
Les colonnes mesProduitsDuJour.id et mesProduitsDeLaVeille.id sont-elles indexées ? Et en remplaçant * juste par N1.id, pour voir si la requête charrie moins de données.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
10
|
|
|
#8 | ||
|
Invité de passage
![]() Développeur Web Inscription : juillet 2011 Messages : 13 ![]() |
Comme cité précédemment :
12 076 lignes au total (du jour) 12 073 lignes au total (veille) Effectivement, Après vérification, la table du jour était indexée mais pas la table de la veille J'exécute ceci : Code :
Pourtant des produits de mesProduitsDuJour ne sont bel et bien pas présents sur mesProduitsDeLaVeille |
||
|
|
00
|
|
|
#9 | ||
|
Invité de passage
![]() Développeur Web Inscription : juillet 2011 Messages : 13 ![]() |
Tu m'as mis sur une piste et j'ai finalement la réponse...
Code :
je pense à l'indexation de la seconde table qui ne l'était pas en explication... et j'ai changé RIGHT en LEFT... (grosse incidence > pas sûr) Miracle informatique ou justifié ? Explication ? ^_^ Merci en tout cas... PUIS-JE ME PERMETTRE UNE AUTRE DEMANDE ? ça serait de comparer les 2 tables (ou les stocker en tableaux PHP) afin de ressortir uniquement les différences... Merci en tout cas |
||
|
|
00
|
|
|
#10 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
Saluton,
Qu'appelles-tu les différences ? Les lignes qui sont dans l'une des tables seulement ou bien aussi les lignes présentes dans les deux tables mais pour des valeurs différentes dans les colonnes autres que l'identifiant ?
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
00
|
|
|
#11 |
|
Invité de passage
![]() Développeur Web Inscription : juillet 2011 Messages : 13 ![]() |
Voilà c'est ça :
On a 2 tables avec tous les produits, Je voudrais savoir sur ma table de la veille qu'est ce qui je dois changer par rapport à ma table du jour (ex le prix de la référence XXX à prix 1 €, la description de la référence YYY a été raccourcie, la puissance de ZZZ a été augmentée... 1ere étape serait d'afficher... bah... ou les lignes de la table de la veille et juste en dessous les lignes de la table du jour ou dans l'idéal du coup, mettre en "couleur" ou en avant uniquement les parties qui ont "changé" Merci PS : LE PROBLEME DE LA REQUETE VIENT DE REPLANTER je m'explique : j'ai mis à jour, pour aujourd'hui, la base du jour des produits ma table N est devenu N-1 et j'ai effacer ma N pour y insérer les données du jour avant le comparatif et là... pour la même requête, tout plante (mysql 99% CPU...) là, je sèche ! |
|
|
00
|
|
|
#12 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
Il n'y aurait pas comme un problème de conception (donc de modélisation) dans cette base de données ?
Par ailleurs quelle machine est support du serveur MySQL ? Elle est peut-être tout simplement sous-dimensionnée
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
00
|
|
|
#13 |
|
Invité de passage
![]() Développeur Web Inscription : juillet 2011 Messages : 13 ![]() |
Je suis vraiment une *quiche* !
j'ai regardé à nouveau.... lors du transfert de N vers N-1, la table n'a plus d'index et de clé primaire et donc ça plante... Voilà j'ai remédié au problème à base de : ALTER TABLE `mesProduitsDeLaVeille` ADD INDEX ( `art_id` ) au moment de la copie et donc ça remarche... |
|
|
00
|
|
|
#14 | |||
![]() ![]() |
Citation:
Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|||
|
10
|
|
|
#15 | ||
|
Invité de passage
![]() Développeur Web Inscription : juillet 2011 Messages : 13 ![]() |
Bonjour,
Merci pour cette requête qui me semble magnifique mais je n'y comprends pas trop le sens (du moins la lecture) Peut-être pour éclairer ma lanterne une "démo" de ma base serait la bienvenue Concrètement, je sélectionne 3 colonne (id, marque, prix) car c'est là que j'ai fait mon test REQUETE : Code :
(photo ci-joint) et donc il faut repérer par une requête SQL les lignes qui ont été modifiées dans la base N (du jour) et qu'il faudra modifier dans la base N1 (de la veille) ICI C'EST LA LIGNE 2 QUI DEVRAIT SORTIR EN RESULTAT Merci encore de votre aide |
||
|
|
00
|
|
|
#16 | ||
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 853 ![]() |
cinephil te donne une requête qui teste la différence dans ta colonne_1 entre tes 2 tables grace à:
Code sql :
que tu peux aussi écrire: Code sql :
IF(N.colonne_1 <> N1.colonne_1,1,0) AS colonne_1_changee
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
||
|
|
00
|
|
|
#17 | ||
|
Invité de passage
![]() Développeur Web Inscription : juillet 2011 Messages : 13 ![]() |
D'accord,
c'est un peu plus clair, Mais ne restant pas sur ma faim j'ai exécuté : Code :
donc là, je me dis : quelle utilité de CASE > WHEN > END ? Bien à vous |
||
|
|
00
|
|
|
#18 |
|
Invité de passage
![]() Développeur Web Inscription : juillet 2011 Messages : 13 ![]() |
Ok,
à part l'explication pour moi c'est clos. Merci à tous ! |
|
|
00
|
|
|
#19 | ||
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
Explication de quoi ? On est passé de
Citation:
Du flou le plus total à un cahier des charges précis et restreint. Comme dit mon maître Dédé : Citation:
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
||
|
00
|
|
|
#20 | ||||
|
Invité de passage
![]() Développeur Web Inscription : juillet 2011 Messages : 13 ![]() |
Bonjour,
Non en fait on n'a pas "sauté" d'étapes, Il y a eu cette proposition : Code :
J'ai décidé (toujours pour comprendre) de faire la même requête mais sans le CASE WHEN END Ce qui a donné ceci Code :
Par contre, là je n'ai donc pas compris le pourquoi (enfin l'utilité / l'explication) de cette partie de la requête (afin d'une future utilisation) Merci |
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com