IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Modification requete SQL - PHP


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 76
    Points : 41
    Points
    41
    Par défaut Modification requete SQL - PHP
    Bonjour,

    J'ai une table SQL, je le charge par un fichier Excel.
    Le problème est que plusieurs lignes se répètent dans le fichier, et dans la table je trouve qu'une seule ligne.
    Par exemple, j'ai ces trois lignes dans le fichier excel:

    [C]FOURNITURE MFC SERIE[C]
    [C]FOURNITURE MFC SERIE[C]
    [C]FOURNITURE MFC SERIE[C]

    Dans ma table je trouve que ça:

    [C]FOURNITURE MFC SERIE[C]

    Et pour être claire, les clés primaires sont les deux premières champs et aussi sont unique dans la structure de la table. Je pense que j'ai appliqué une contrainte de unique key. Est-ce-que je l'enlève ou non ?

    Voici ma requete SQL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
       if ($articleid == 'DIEPRESTATION' || $articleid == 'DIEDIVBIEN' || $articleid == 'DIEDIVERS' ){
    						if(!($this->_db->query("INSERT INTO `article` (`ID_Article`, `Designiation`, `ID_LRU`) VALUES ('".$articleid."', '".$designation."', '".$IdLRU."');")))
    					{   
    							if ($LRU != 'new'){
    								   return $this->_db->query(" UPDATE  `FLOOSE`.`article` SET  `ID_LRU` =  '".$IdLRU."' WHERE  `article`.`ID_Article` =  '".$articleid."' AND  `article`.`Designiation` =  '".$designation."' LIMIT 1 ;");
    							}else {
    								return false;
    							}
    					}
    					else{
    						return TRUE;
    					}
            }
    Comment je peux changer ma requête pour que je trouves toutes les lignes dans ma table ?
    Merci.

  2. #2
    Membre averti
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2017
    Messages : 279
    Points : 421
    Points
    421
    Par défaut
    Commence par enlever la contrainte UNIQUE
    L’appétit vient en mangeant.
    Pourquoi compliquer quand on peut faire plus simple?
    Une réponse vous a été utile? pensez à
    Vous avez eu la réponse à votre question? marquez votre discussion
    Faites un tour aux FAQs et aux tutoriels et cours.

  3. #3
    Membre averti
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2017
    Messages : 279
    Points : 421
    Points
    421
    Par défaut
    Quand tu dis "les clés primaires sont les deux premières champs et aussi sont unique dans la structure de la table" il s'agit de FOURNITURE MFC? ou de quoi? soit plus explicite
    L’appétit vient en mangeant.
    Pourquoi compliquer quand on peut faire plus simple?
    Une réponse vous a été utile? pensez à
    Vous avez eu la réponse à votre question? marquez votre discussion
    Faites un tour aux FAQs et aux tutoriels et cours.

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Salut,

    Cela fais deux fois que j'interviens pour t'aider, et le sentiment que j'ai, c'est que tu es un peu brouillon dans ce que tu fais.

    Le code que tu nous donnes, me semble incohérent.

    On pourrais avoir par exemple le DDL de ta table pour avoir une vision plus clair ?

    Merci

  5. #5
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 76
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par Nazoïde Voir le message
    Commence par enlever la contrainte UNIQUE
    1- Je vide ma table
    2- J'enlève la contrainte.
    3- Je recharge ma table.

    Je dois faire ses étapes à ton avis ?
    Merci.

  6. #6
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 76
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par Nazoïde Voir le message
    Quand tu dis "les clés primaires sont les deux premières champs et aussi sont unique dans la structure de la table" il s'agit de FOURNITURE MFC? ou de quoi? soit plus explicite
    Voilà la structure de ma table:

    ID_Article , Designiation, LRUEt les deux premières champs sont des clés primaires et aussi sont unique sont: ID_Article , DesigniationLa structure de mon fichier Excel est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Paramètre 1 corresponds à ID_Article ==> FOURNITURE 
    Paramètre 2 corresponds à Designiation ==> MFC
    Paramètre 3 corresponds à LRU ==> SERIE

  7. #7
    Membre averti
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2017
    Messages : 279
    Points : 421
    Points
    421
    Par défaut

    Paramètre 1 corresponds à ID_Article ==> FOURNITURE
    Paramètre 2 corresponds à Designiation ==> MFC
    Paramètre 3 corresponds à LRU ==> SERIE
    Tu vois bien que ID_Article et Designation sont unique mais tu veux les introduire trois fois. Si ce n'est pas de la magie ça!...
    1- Je vide ta table
    2- J'enlève la contrainte.
    3- Je recharge ta table.

    Dis moi ce que tu as comme résultat.
    Si c'est OK, n'oubli pas de passer à résolu.
    L’appétit vient en mangeant.
    Pourquoi compliquer quand on peut faire plus simple?
    Une réponse vous a été utile? pensez à
    Vous avez eu la réponse à votre question? marquez votre discussion
    Faites un tour aux FAQs et aux tutoriels et cours.

  8. #8
    Membre averti
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2017
    Messages : 279
    Points : 421
    Points
    421
    Par défaut
    La meilleure solution serait de
    1. laisser ta contraint unique sur ID_Article et Designation
    2. créer un champ Qte_Article qui contiendra le nombre d'article (car, tu peux avoir plusieurs articles le même ID et la même désignation); Ex: ID_Article FOURNITURE, Designation MFC et de LRU SERIE.
    3. pour ton exemple 03 comme quantité.
    L’appétit vient en mangeant.
    Pourquoi compliquer quand on peut faire plus simple?
    Une réponse vous a été utile? pensez à
    Vous avez eu la réponse à votre question? marquez votre discussion
    Faites un tour aux FAQs et aux tutoriels et cours.

  9. #9
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 76
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par Nazoïde Voir le message
    La meilleure solution serait de
    1. laisser ta contraint unique sur ID_Article et Designation
    2. créer un champ Qte_Article qui contiendra le nombre d'article (car, tu peux avoir plusieurs articles le même ID et la même désignation); Ex: ID_Article FOURNITURE, Designation MFC et de LRU SERIE.
    3. pour ton exemple 03 comme quantité.
    C'est bon j'ai supprimé l'index Unique. Et la clé primaire qui était pour ID_Article et Designation a été supprimé aussi. Et je n'ai pu pas le retourner.
    J'ai ajouté un autre champ ID, je lui ai affecté une clé primaire, mais le problème ma table ne charge pas par les données .

  10. #10
    Membre averti
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2017
    Messages : 279
    Points : 421
    Points
    421
    Par défaut
    Est-ce que tu y es?
    L’appétit vient en mangeant.
    Pourquoi compliquer quand on peut faire plus simple?
    Une réponse vous a été utile? pensez à
    Vous avez eu la réponse à votre question? marquez votre discussion
    Faites un tour aux FAQs et aux tutoriels et cours.

  11. #11
    Membre averti
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2017
    Messages : 279
    Points : 421
    Points
    421
    Par défaut
    1. Il faut que ton ID soit un INTEGER AUTO_INCREMENTE
    2. Ajoute le dans ton fichier excel (en créeant une colonne ID en respectant sa position comme tu l'as fait pour tous les autres) et ne met rien à l'intérieur. MySQL s'en occupera.
    L’appétit vient en mangeant.
    Pourquoi compliquer quand on peut faire plus simple?
    Une réponse vous a été utile? pensez à
    Vous avez eu la réponse à votre question? marquez votre discussion
    Faites un tour aux FAQs et aux tutoriels et cours.

  12. #12
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 76
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par Nazoïde Voir le message
    1. Il faut que ton ID soit un INTEGER AUTO_INCREMENTE
    2. Ajoute le dans ton fichier excel (en créeant une colonne ID en respectant sa position comme tu l'as fait pour tous les autres) et ne met rien à l'intérieur. MySQL s'en occupera.
    Je suis désolée pour le retard de réponse.
    En fait j'ai ajouté un ID INT(40) AUTO_INCREMENTE et je l'ai ajouté dans la requete [C[INSERT[/C] aussi et sa valeur je lui ai affecté NULL comme les autres tables où il y ' a des AUTO increment.
    Mais je l'ai pas ajouté dans mon fichier Excel, juste dans la fonction de parsing j'ai ajouté NULL au début:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $listEquipement[] = new Article(NULL,
                $sheet->getCellByColumnAndRow(3, $row)->getCalculatedValue(),
                $sheet->getCellByColumnAndRow(4, $row)->getCalculatedValue(),
                $sheet->getCellByColumnAndRow(2, $row)->getCalculatedValue()
    Est-ce que je dois l'ajouter dans le fichier Excel, parce que dans les autres tables je l'ai pas fait ?
    Merci

  13. #13
    Membre averti
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2017
    Messages : 279
    Points : 421
    Points
    421
    Par défaut
    Ajoute la colonne ID Dans ton fichier Excel et n'y renseigne aucune valeur. Etant donné qu'il est en AUTO_INCREMENT, MySQL fera une affectation automatique pour toi.
    Pour ce qui est du NULL dans ta fonction de parsing, dis moi ce qu'elle fait ta fonction.
    L’appétit vient en mangeant.
    Pourquoi compliquer quand on peut faire plus simple?
    Une réponse vous a été utile? pensez à
    Vous avez eu la réponse à votre question? marquez votre discussion
    Faites un tour aux FAQs et aux tutoriels et cours.

  14. #14
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 76
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par Nazoïde Voir le message
    Ajoute la colonne ID Dans ton fichier Excel et n'y renseigne aucune valeur. Etant donné qu'il est en AUTO_INCREMENT, MySQL fera une affectation automatique pour toi.
    Pour ce qui est du NULL dans ta fonction de parsing, dis moi ce qu'elle fait ta fonction.
    Bonjour;

    1- J'ai vidé la table et j'ai ajouté un nouveau champ dans la table ID INT auto_increment PRIMARY KEY au début de la table et bien sûr j'ai enlevé la contrainte sur les deux champs ID_Article et Designiation.
    2- J'ai ajouté une nouvelle colonne dans le fichier Excel au début.
    3- J'ai changé l'ordre des colonnes dans la fonction de Parsing:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       $listEquipement[] = new Article(NULL,
                $sheet->getCellByColumnAndRow(3, $row)->getCalculatedValue(),
                $sheet->getCellByColumnAndRow(4, $row)->getCalculatedValue(),			
                $sheet->getCellByColumnAndRow(6, $row)->getCalculatedValue()
    		);
    4- J'ai ajouté un paramètre ID dans la requete au début:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if ($articleid == 'DIEPRESTATION' || $articleid == 'DIEDIVBIEN' || $articleid == 'DIEDIVERS' ){
    						if(!($this->_db->query("INSERT INTO `article` (`ID`, `ID_Article`, `Designiation`, `ID_LRU`) VALUES ('".$articleID"'., '".$articleid."', '".$designation."', '".$IdLRU."');")))
    					{   
    							if ($LRU != 'new'){
    								   return $this->_db->query(" UPDATE  `FLOOSE`.`article` SET  `ID_LRU` =  '".$IdLRU."' WHERE  `article`.`ID_Article` =  '".$articleid."' AND  `article`.`Designiation` =  '".$designation."' LIMIT 1 ;");
    							}else {
    								return false;
    							}
    					}
    					else{
    						return TRUE;
    					}
            }
    5- Je lui ai fait les getters et les setters.
    Les mises à jour (Pour mettre à jour la table) devient ne fonctionne plus, il reste bloqué.

  15. #15
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Si votre ID est en autoIncrement pourquoi vouloir le forcer ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "INSERT INTO `article` (`ID`, `ID_Article`, `Designiation`, `ID_LRU`) VALUES ('".$articleID"'., '".$articleid."', '".$designation."', '".$IdLRU."')
    De plus est différent de D'ailleurs d'où vient cette variable Le plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "INSERT INTO `article` (`ID_Article`, `Designiation`, `ID_LRU`) VALUES ('".$articleid."', '".$designation."', '".$IdLRU."')

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] requete sql php
    Par asus02 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 09/01/2011, 19h32
  2. [MySQL] Optimisation requete SQL/php
    Par tripsi dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 13/04/2010, 08h31
  3. Modification requete sql déjà compliqué !
    Par Maxow dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/11/2008, 23h50
  4. Modification Requete SQL
    Par rippoz dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/11/2007, 12h50
  5. [MySQL] Requete SQL PHP
    Par CaptainChoc dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 22/10/2005, 16h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo