Bonjour,

Je suis un débutant stagiaire en développement web et base de données(mysql).

Je suis confronté à de problèmes que je vais vous exposer ci-dessous:

J'ai 4 tables :

1) table_temporaire=> CREATE TABLE `table_temporaire` (
`id_tmp` int(11) NOT NULL PRIMARY KEY AUT_INCREMENT,
`cuid` varchar(255) DEFAULT NULL,
`mail` varchar(255) DEFAULT NULL,
`tel_mobile` varchar(255) DEFAULT NULL,
`pers_id` int(11) NOT NULL,
`premium_id` int(11) NOT NULL,
`id_statut` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--------------------------------------------------------------

2) premieum=> CREATE TABLE `premium` (
`premium_id` int(11) NOT NULL PRIMARY KEY AUT_INCREMENT,
`Nom` varchar(255) NOT NULL,
`Prenom` varchar(255) NOT NULL,
`cuid` varchar(255) NOT NULL,
`mail` varchar(255) NOT NULL,
`Tel` varchar(255) NOT NULL,
`tel_mobile` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3) infos_personne=>CREATE TABLE `infos_personne` (
`pers_id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`nom` varchar(255) NOT NULL,
`prenom` varchar(255) NOT NULL,
`mail` varchar(255) NOT NULL,
`entite` varchar(255) NOT NULL,
`cuid` varchar(255) NOT NULL,
`tel_fixe` varchar(255) NOT NULL,
`tel_mobile` varchar(255) NOT NULL,
`cuid_md` varchar(255) NOT NULL,
`mail_md` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


4) lib_statut =>CREATE TABLE `lib_statut` (
`id_statut` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT
`code_GIR` int(6) NOT NULL,
`description` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

---------------------------------------------------

En fait, dans la première table(table_temporaire), c'est une table temporaire qui est mise à jour chaque semaine(une fois).

A chaque mise à jour de cette table, il est question de comparer son contenu avec celles des autres 3 autres tables, car ils ont 3 attributs en commun(`mail` varchar(255) NOT NULL,
`cuid` varchar(255) NOT NULL,
`tel_mobile` varchar(255) NOT NULL).

Objectifs:

- C'est de savoir combien il y a comme enregistrements dans la 'table_temporaire' trouvés dans chacune des tables(infos_personne,premium, lib_statut).

Exemple: combien de 'cuid' dans la 'table_poraire' qui EXISTENT dans la table 'infos_personne' et dans la table 'premium'.

En effet, j'ai testé deux types de jointure " cross join" et "inner join" dont aucune ne m'a donnée le résultat que je cherche.

le résultat qu'on m'affiche c'est le totale enregistrement de la "table_poraire " qui reçoit les clés étrangères de des autres tables.

QUELQU'UN PEUT M'AIDER s'il vous plaît?

Par ailleurs,est-ce qu'il y a la possibilité d'avoir un script php qu'on pourrait utiliser sans passer par l'interface de la base de données mysql?
Salut nkm !

Premièrement, sache que tu peux mettre en forme ton code SQL avec la balise appropriée, de manière à rendre le tout beaucoup plus lisible comme ceci :

CREATE TABLE `table_temporaire` (
`id_tmp` int(11) NOT NULL PRIMARY KEY AUT_INCREMENT,
`cuid` varchar(255) DEFAULT NULL,
`mail` varchar(255) DEFAULT NULL,
`tel_mobile` varchar(255) DEFAULT NULL,
`pers_id` int(11) NOT NULL,
`premium_id` int(11) NOT NULL,
`id_statut` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


Je n'ai pas très bien compris ton objectif.

À part ça, je souhaite te rappeler que dans un modèle conceptuel de données correct, on évite généralement de dupliquer des champs. Dans ton exemple, il semblerait que tu aies deux tables pour représenter deux types d'utilisateurs "normal" et "premium", avec de nombreux champs qui reviennent (nom, prénom, téléphone, etc). Idéalement, il faudrait créer une seule table que tu nomme "utilisateurs" par exemple, avec un champ booléen "premium" qui indique le statut de l'utilisateur. Si le statut comprends plus que deux valeurs, alors une nouvelle table "statuts" contenant toutes les valeurs possible doit être créée.

Attention aussi à respecter une certaine convention dans la façon de nommer tes tables et tes colonnes. Cela permet de s'y retrouver plus facilement, surtout quand on souhaite écrire les requêtes SQL.

Je suis conscient que je réponds pas tout à fait à ta question. Mais puisque tu expliques être débutant, j'en profite pour te guider vers des bonnes pratiques, plutôt que de te filer une solution à un modèle mal conçu à la base (ne le prends pas mal).

nkm a écrit :
Par ailleurs,est-ce qu'il y a la possibilité d'avoir un script php qu'on pourrait utiliser sans passer par l'interface de la base de données mysql?

En PHP, il est recommandé d'utiliser l'extension PDO pour accéder à ta base de données. Tu trouveras toute la documentation sur ce site indispensable.
Modifié par Anymah (12 Jul 2018 - 23:57)
Merci pour votre réponse Anymah.
Je vais procéder comme tu me l'as dit et je vais voir ce que cela va donner.
Mon problème n'est pas totalement résolu, mais vous m'avez guidé et m'avez donné une idée.
Cependant, j'ai d'autres questions:

En fait, on me fournit chaque semaine un fichier CSV contenant: Mail et Tel_mobile(deux attributs qui se trouvent dans ma table utilisateurs stockée dans la base de donnée Mysql). On me dit de compter le nombre de mail et tel_mobile dans table utilisateurs qui correspondent à ceux du fichier fourni en CSV. Comment peux-je le faire? Merci pour votre aide.
Merci pour votre réponse.
Je vais procéder comme tu me l'as dit et je vais voir ce que cela va donner.
Mon problème n'est pas totalement résolu, mais vous m'avez guidé et m'avez donné une idée.
Cependant, j'ai d'autres questions:

En fait, on me fournit chaque semaine un fichier CSV contenant: Mail et Tel_mobile(deux attributs qui se trouvent dans ma table utilisateurs stockée dans la base de donnée Mysql). On me dit de compter le nombre de mail et tel_mobile dans table utilisateurs qui correspondent à ceux du fichier fourni en CSV. Comment peux-je le faire? Merci pour votre aide.
Hello !

Ton fichier CSV tu peux le parcourir en PHP avec la fonction fgetcsv. Pour chaque ligne, tu obtiendras un tableau contenant les champs. Pour chaque champs, dans ton cas "mail" et "tel_mobile", tu peux faire une requête qui compte le nombre d'occurrences dans la table "utilisateurs" de ce style :

SELECT count(*) AS 'nb_occurrences' FROM utilisateurs
WHERE mail = 'john@smith.com'

SELECT count(*) AS 'nb_occurrences' FROM utilisateurs
WHERE tel_mobile = '666'


Le mot clé "AS" te permet de donner un alias à la colonne. C'est utile pour donner un nom plus explicite que "count(*)" comme résultat. Dans les deux requêtes, il te suffira de remplacer le mail ou le téléphone par les variables récupérées précédemment.