Probleme sur requete de comptage

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 : Probleme sur requete de comptage

par Cyrano » 27 nov. 2006, 20:33

Pour ma part, je ne demande rien, je suggère. Tu vas avoir à moyen terme de problèmes de maintenances non négligeables sur ton application si tu la laisse dans l'état. Il est certainement possible d'obtenir ce que tu veux à partir de la table que tu as conçue, mais il faudrait à mon avis construire une usine à gaz pour parvenir à la même chose que tout ce que tu obtiendrais avec une structure multi-tables. :-k

par azimut2000 » 27 nov. 2006, 20:26

Reprenons le sujet. Azimut2000, il y a un grave problème de conception dans ce modèle. Pour illustrer ce qu'à voulu dire LHDN92 à propos de tables liées (et non de bases liées du reste), je t'invite à jeter un coup d'oeil sur ceci. Applique le principe exposé pour revoir la construction de ta table, tu auras des performance très nettement améliorées.
Certe, je "bidouille" plus qu'autre chose en PHP & MySQL, néanmoins, en général j'arrive à me débrouiller...
Cette fois, ça coince et je ne suis pas certain de pouvoir faire ce que tu demandes dans les temps impartis !

par Cyrano » 27 nov. 2006, 07:40

Reprenons le sujet. Azimut2000, il y a un grave problème de conception dans ce modèle. Pour illustrer ce qu'à voulu dire LHDN92 à propos de tables liées (et non de bases liées du reste), je t'invite à jeter un coup d'oeil sur ceci. Applique le principe exposé pour revoir la construction de ta table, tu auras des performance très nettement améliorées.

Un des principes fondamentaux lors de la modélisation d'une base de données : éviter autant que faire se peut les champs NULL et les redondances. Certains types de données sont multipliées dans ta table actuelles "aux cas où", pour certaines lignes (seulement), tu aurais de quoi les remplir. Essaye de voir comment améliorer ça.

par Ajoloca » 27 nov. 2006, 02:39

Thanks, @+

par DocType » 27 nov. 2006, 02:37

Perso je me range de ton coté.
J'ai troué le plaffond, et du InnoDB en prime. Mort au relationnel !!!
Je crains que la nuit te soit rude Ajoloca. Un somnifère s'impose je pense :lol:
Moi mon coeur s'est emballé en voyant cela, c'est encore pire que le pire que j'ai pu voir :lol:
Bon allez hop, moi j'y vais avant de devoir prendre le somnifère ^^
++ bonne nuit Ajo'

par Ajoloca » 27 nov. 2006, 02:35

Wahou
Oui, apparemment c'est cela qu'il recherche. Maintenant, soit ça les fait sauter au plafond, soit pas. Moi perso ça me fait sauter très haut ! J'aurai plutôt utilisé des bases liées en essyant d'utiliser des CHAR plutôt que des text...
Enfin, A vot' bon coeur les copains ViPHP :wink:
(poste tout de même une explication plus large de la base, ce que ça peut contenir etc....un exemple concret...ou echantillon comme Albat et Ajoloca ont également demandé :wink: )
Perso je me range de ton coté.
J'ai troué le plaffond, et du InnoDB en prime. Mort au relationnel !!!

par DocType » 27 nov. 2006, 02:18

Wahou
Oui, apparemment c'est cela qu'il recherche. Maintenant, soit ça les fait sauter au plafond, soit pas. Moi perso ça me fait sauter très haut ! J'aurai plutôt utilisé des bases liées en essyant d'utiliser des CHAR plutôt que des text...
Enfin, A vot' bon coeur les copains ViPHP :wink:
(poste tout de même une explication plus large de la base, ce que ça peut contenir etc....un exemple concret...ou echantillon comme Albat et Ajoloca ont également demandé :wink: )

par azimut2000 » 27 nov. 2006, 02:05

Re,
Si je relis tous les post concernant ta demande, la seule fois ou je trouve "la base entière" c'est sur ton dernier.

Si tu ne sais pas comment obtenir ce qu'on te demande (la structure d'une table et extraire quelques données de celle-ci), demande.

Pour obtenir la structure d'une table

Code : Tout sélectionner

DESCRIBE nom_table;
Pour obtenir un certain nombre d'enregistrements

Code : Tout sélectionner

SELECT * FROM nom_table LIMIT n, m;
Où n représente le Nº de l'enrgistrement de départ et m le nombre d'enregistrements à extraire.
C'est cela que vous souhaitez avoir ?

Code : Tout sélectionner

CREATE TABLE `client` ( `id` int(11) NOT NULL, `NomClient` text NOT NULL, `ND` text NOT NULL, `DateInstall` date NOT NULL, `NbrTVHD` tinyint(4) NOT NULL, `NbrTVSD` tinyint(4) NOT NULL, `NbrPCFixe` tinyint(4) NOT NULL, `NbrPCPortable` tinyint(4) NOT NULL, `NbrLive` tinyint(4) NOT NULL, `NbrLiveM` tinyint(4) NOT NULL, `TypInstall` text NOT NULL, `Type` text NOT NULL, `PuissRecu` text NOT NULL, `PuissEmise` text NOT NULL, `LongEthernet` text NOT NULL, `AdresseMAC` text NOT NULL, `NumSerieONT` text NOT NULL, `DescriptionPassage` text NOT NULL, `Lieu` text NOT NULL, `Info` text NOT NULL, `LieuLB` text NOT NULL, `InfoLB` text NOT NULL, `HTache1a` time NOT NULL, `HTache1b` time NOT NULL, `HTache2a` time NOT NULL, `HTache2b` time NOT NULL, `nbr1` tinyint(4) NOT NULL, `nbr2` tinyint(4) NOT NULL, `CnxTVHD1` text NOT NULL, `BouquetHD1` text NOT NULL, `LieuTVHD1` text NOT NULL, `TVHD1` text NOT NULL, `CnxTVHD2` text NOT NULL, `BouquetHD2` text NOT NULL, `LieuTVHD2` text NOT NULL, `TVHD2` text NOT NULL, `CnxTVHD3` text NOT NULL, `BouquetHD3` text NOT NULL, `LieuTVHD3` text NOT NULL, `TVHD3` text NOT NULL, `CnxTVHD4` text NOT NULL, `BouquetHD4` text NOT NULL, `LieuTVHD4` text NOT NULL, `TVHD4` text NOT NULL, `CnxTVHD5` text NOT NULL, `BouquetHD5` text NOT NULL, `LieuTVHD5` text NOT NULL, `TVHD5` text NOT NULL, `CnxTVSD1` text NOT NULL, `BouquetSD1` text NOT NULL, `LieuTVSD1` text NOT NULL, `TVSD1` text NOT NULL, `CnxTVSD2` text NOT NULL, `BouquetSD2` text NOT NULL, `LieuTVSD2` text NOT NULL, `TVSD2` text NOT NULL, `CnxTVSD3` text NOT NULL, `BouquetSD3` text NOT NULL, `LieuTVSD3` text NOT NULL, `TVSD3` text NOT NULL, `CnxTVSD4` text NOT NULL, `BouquetSD4` text NOT NULL, `LieuTVSD4` text NOT NULL, `TVSD4` text NOT NULL, `CnxTVSD5` text NOT NULL, `BouquetSD5` text NOT NULL, `LieuTVSD5` text NOT NULL, `TVSD5` text NOT NULL, `CnxFixe1` text NOT NULL, `fixe1` text NOT NULL, `LieuPCFixe1` text NOT NULL, `FIX1` text NOT NULL, `CnxFixe2` text NOT NULL, `fixe2` text NOT NULL, `LieuPCFixe2` text NOT NULL, `FIX2` text NOT NULL, `CnxFixe3` text NOT NULL, `fixe3` text NOT NULL, `LieuPCFixe3` text NOT NULL, `FIX3` text NOT NULL, `CnxFixe4` text NOT NULL, `fixe4` text NOT NULL, `LieuPCFixe4` text NOT NULL, `FIX4` text NOT NULL, `CnxFixe5` text NOT NULL, `fixe5` text NOT NULL, `LieuPCFixe5` text NOT NULL, `FIX5` text NOT NULL, `CnxPortable1` text NOT NULL, `portable1` text NOT NULL, `LieuPortable1` text NOT NULL, `POR1` text NOT NULL, `CnxPortable2` text NOT NULL, `portable2` text NOT NULL, `LieuPortable2` text NOT NULL, `POR2` text NOT NULL, `CnxPortable3` text NOT NULL, `portable3` text NOT NULL, `LieuPortable3` text NOT NULL, `POR3` text NOT NULL, `CnxPortable4` text NOT NULL, `portable4` text NOT NULL, `LieuPortable4` text NOT NULL, `POR4` text NOT NULL, `CnxPortable5` text NOT NULL, `portable5` text NOT NULL, `LieuPortable5` text NOT NULL, `POR5` text NOT NULL, `CnxLiveM1` text NOT NULL, `TypeLiveM1` text NOT NULL, `LieuLiveM1` text NOT NULL, `ZIK1` text NOT NULL, `CnxLiveM2` text NOT NULL, `TypeLiveM2` text NOT NULL, `LieuLiveM2` text NOT NULL, `ZIK2` text NOT NULL, `CnxLiveM3` text NOT NULL, `TypeLiveM3` text NOT NULL, `LieuLiveM3` text NOT NULL, `ZIK3` text NOT NULL, `CnxLiveM4` text NOT NULL, `TypeLiveM4` text NOT NULL, `LieuLiveM4` text NOT NULL, `ZIK4` text NOT NULL, `CnxLiveM5` text NOT NULL, `TypeLiveM5` text NOT NULL, `LieuLiveM5` text NOT NULL, `ZIK5` text NOT NULL, `CnxLive1` text NOT NULL, `TypeLive1` text NOT NULL, `LieuLive` text NOT NULL, `CAM1` text NOT NULL, `CnxLive2` text NOT NULL, `TypeLive2` text NOT NULL, `LieuLive2` text NOT NULL, `CAM2` text NOT NULL, `CnxLive3` text NOT NULL, `TypeLive3` text NOT NULL, `LieuLive3` text NOT NULL, `CAM3` text NOT NULL, `CnxLive4` text NOT NULL, `TypeLive4` text NOT NULL, `LieuLive4` text NOT NULL, `CAM4` text NOT NULL, `CnxLive5` text NOT NULL, `TypeLive5` text NOT NULL, `LieuLive5` text NOT NULL, `CAM5` text NOT NULL, `TIC` text character set armscii8 NOT NULL, `Dpt` int(5) default NULL, `SAV` longtext character set armscii8, `Prod` longtext character set armscii8 NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Dans tous les champs qui commencent par "Cnx", je peux avoir les données suivantes: "CPL", "Ethernet" ou "Wifi".
Donc, pour le même enregistrement, un ou plusieurs champs "Cnx" peuvent etre non NULL; s'ils le sont, je veux savoir combien de fois le mot "CPL" apparaît et ajouter 1 unité à chaque fois. Ensuite, ce calcul étant pour une seule ligne "datée", je veux savoir la même chose, mais sur plusieurs lignes définie et comprises entre 2 dates...

par albat » 26 nov. 2006, 20:02

je ne sais pas ce qu'il vous faut exactement pour répondre ??? (...)
maintenant, je vois qu'il faut livrer la base entière.
Ah bon ? :shock:

Tu as dû mal me lire, alors...
Peux-tu nous donner la structure exacte de ta table ?
Et éventuellement un échantillon de données ?

par Ajoloca » 26 nov. 2006, 20:01

Re,
Si je relis tous les post concernant ta demande, la seule fois ou je trouve "la base entière" c'est sur ton dernier.

Si tu ne sais pas comment obtenir ce qu'on te demande (la structure d'une table et extraire quelques données de celle-ci), demande.

Pour obtenir la structure d'une table

Code : Tout sélectionner

DESCRIBE nom_table;
Pour obtenir un certain nombre d'enregistrements

Code : Tout sélectionner

SELECT * FROM nom_table LIMIT n, m;
Où n représente le Nº de l'enrgistrement de départ et m le nombre d'enregistrements à extraire.

par azimut2000 » 26 nov. 2006, 19:50


Je constate que ici tu réponds au post, mais toujours pas aux questions.
Si toi tu connais tes tables, nous ici, nous n'avons pas la chance d'avoir des boules de cristal.
Que voulez vous ?
Je peux vous envoyer la base pour bien comprendre, mais ça va faire un peu gros pour le forum :)
Pis, je suis pas un pro de l'utilisation de ces forums... On m'avait conseillé de venir poser ma question sur 2/3 sites spécialisés, mais je vois que je les personnes qui y sont, ne semblent pas très partageur de leur connaissances !
Je suis désolé si je n'ai pas respecté les conditions, désolé si je répond que sur CE forum, désolé si je ne mets pas plus de choses, désolé si je choque car je m'y prend certainement mal... Mais en même temps, je ne sais pas ce qu'il vous faut exactement pour répondre ??? Je pensait qu'en expliquant simplement ce que je souhaitait faire pouvait suffire, maintenant, je vois qu'il faut livrer la base entière.
Un peu déçu...
M'enfin, maintenant, s'il reste quelques ames charitables, je suis preneur de conseils pour un pauvre mec qui essai de se mettre à PHP & surtout à MySQL et au SQL tout simplement...

Thierry

par albat » 26 nov. 2006, 17:30

nous n'avons pas la chance d'avoir des boules de cristal.
Pas les miennes, en tout cas.

suis plus là !!! :-*

par Ajoloca » 26 nov. 2006, 17:27

Désolé "Truc", mais je n'avais pas eu de réponse et je dois rendre ma copie pour mardi ! J'ai essayé au départ de me débrouiller seul, mais voyant la date arriver, je me suis - un peu tard - décidé à lancer une demande d'aide.
J'ai donc, effectivement posé ma question sur 2 forums :oops:
Je suis désolé de te contredire mais j'ai répondu personnellement à ton post sur l'autre site en te demandant exactement que te demande Albat
Tu n'as jamais donné suite à mes questions.

Je constate que ici tu réponds au post, mais toujours pas aux questions.
Si toi tu connais tes tables, nous ici, nous n'avons pas la chance d'avoir des boules de cristal.

par azimut2000 » 26 nov. 2006, 15:21

Désolé "Truc", mais je n'avais pas eu de réponse et je dois rendre ma copie pour mardi ! J'ai essayé au départ de me débrouiller seul, mais voyant la date arriver, je me suis - un peu tard - décidé à lancer une demande d'aide.
J'ai donc, effectivement posé ma question sur 2 forums :oops:
Peux-tu nous donner la structure exacte de ta table ?
Et éventuellement un échantillon de données ?
J'ai une base, dans laquelle j'ai 2 tables (1 définissant les "utilisateurs" & une autre ou sont stocké les "données" enregistré par les utilisateurs).
Dans la table "donnée", j'ai environ 60 champs... dans chaque champs, on peut enregistrer des données identiques; c'est a dire que sur la même ligne d'enregistrement, je vais pouvoir avoir la donnée "voiture" ou "décodeur" sur plusieurs champs. Parmi les champs, on a également un champ date qui me permet de connaître le jour de l'enregistrement.

Maintenant, je souhaite simplement, calculer le nombre de "décodeur" situé entre 2 dates... sachant qu'en plus, je dois ajouter dans mon calcul,
1 décodeur de plus sur chaque ligne. Ce qui se résume par la formule:

Code : Tout sélectionner

(Nbr_Decodeur_sur _ligne1 + 1)+(Nbr_Decodeur_sur _ligne2 + 1)+...+(Nbr_Decodeur_sur _ligneN + 1) situé entre la date1 & la date2
J'ai beau triturer MySQL de tous les cotés, je n'arrive pas à réaliser l'opération. On m'a dit qu'avec SQL on pouvait faire cela, mais je commence à douter...

par albat » 25 nov. 2006, 16:33

Peux-tu nous donner la structure exacte de ta table ?
Et éventuellement un échantillon de données ?