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

Langage SQL Discussion :

Fusionner 2 requêtes


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Comptable
    Inscrit en
    Janvier 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2014
    Messages : 29
    Points : 25
    Points
    25
    Par défaut Fusionner 2 requêtes
    Bonjour à tous,

    Je travaille sur un projet de site dynamique et il y a bien entendu des requêtes.

    J'ai un problème avec 2 requêtes, elles fonctionnent très bien séparément mais pour pouvoir les faire fonctionner avec mon code PHP, il faudrait que ce soit une seule et même requête. J'ai testé pas mal de solutions mais aucune ne fonctionne.

    Voila mes requêtes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT nom, prenom, prenom2, surnom, Vprenom1, Vprenom2, Vnom, DATE_FORMAT(naissance, "%d/%m/%Y") AS naissance, DATE_FORMAT(mort, "%d/%m/%Y") AS mort, photo, PersonnaliteLien, PersonnaliteAvatar
    	FROM personnalite 
    	ORDER BY ID DESC LIMIT 0, 1'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT naissance,(YEAR(CURDATE())-YEAR(naissance)) - (SUBSTR(CURDATE(),5,5)<RIGHT(naissance,5)) AS age FROM personnalite
    Avez-vous une suggestion pour que je puisse fusionner ces deux requêtes?

    Merci à vous.

  2. #2
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Citation Envoyé par ninouee Voir le message
    J'ai un problème avec 2 requêtes, elles fonctionnent très bien séparément mais pour pouvoir les faire fonctionner avec mon code PHP, il faudrait que ce soit une seule et même requête. J'ai testé pas mal de solutions mais aucune ne fonctionne.
    Il faudrait savoir ce que tu as essayé et en quoi elles ne fonctionnent pas (message d'erreur, résultat ne correspondant pas à ce qui est souhaité, etc...)

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Comptable
    Inscrit en
    Janvier 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2014
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    Alors voila mon code complet:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?php
    // Connexion à la base de données
    include ('cnxBdd.php');
     
    // Requête pour affichage
    $reponse = $bdd->query('SELECT nom, prenom, prenom2, surnom, Vprenom1, Vprenom2, Vnom, DATE_FORMAT(naissance, "%d/%m/%Y") AS naissance, DATE_FORMAT(mort, "%d/%m/%Y") AS mort, photo, PersonnaliteLien, PersonnaliteAvatar
    	FROM personnalite 
    	ORDER BY ID DESC LIMIT 0, 1');
     
     
    $reponse = $bdd-> query('SELECT naissance,(YEAR(CURDATE())-YEAR(naissance)) - (SUBSTR(CURDATE(),5,5)<RIGHT(naissance,5)) AS age FROM personnalite');
     
     
     
     
    // Afficher le dernier enregistrement
    while ($donnees = $reponse->fetch())
     
    {
    	echo '<p>' . htmlspecialchars($donnees['nom']) .
    	' ' . htmlspecialchars($donnees['prenom']) .
    	' ' . htmlspecialchars($donnees['prenom2']) .
    	' ' . htmlspecialchars($donnees['surnom']) .
    	'</br>' . htmlspecialchars($donnees['Vprenom1']) .
    	' ' . htmlspecialchars($donnees['Vprenom2']) .	
    	' ' . htmlspecialchars($donnees['Vnom']) .	
    	' ' . htmlspecialchars($donnees['age']) .	' ans' .
    	'</br> né(e) le ' . htmlspecialchars($donnees['naissance']) .
    	'</br> décédé(e) le ' . htmlspecialchars($donnees['mort']) .
    	 "<img src=\"" . htmlspecialchars($donnees['photo']) . "\"  />" .
    	 '</br> Sujet : <a href=" ' . htmlspecialchars($donnees['PersonnaliteLien']) .' " target="new" >'. htmlspecialchars ($donnees['prenom']). ' ' . htmlspecialchars($donnees['nom']) .'</a>' .
    	 '</br>Avatars :  <a href=" ' . htmlspecialchars($donnees['PersonnaliteAvatar']) .' "target="new">'. htmlspecialchars ($donnees['prenom']). ' ' . htmlspecialchars($donnees['nom']) .'</a>' .
    	'</p>';
    }
     
    $reponse->closeCursor();
    ?>

    Mon but étant de tester mon dernier enregistrement.

    Au début je n'avais qu'une seule requête mais je me suis rendu compte qu'avoir l'âge de la personne pourrait être bien. Du coup, j'ai trouvé cet exemple de requête pour avoir un âge et je l'ai adapté.

    Mon code PHP pour l'affichage ne fonctionne pas avec les deux requêtes, du coup j'ai essayé de les rassembler.

    Car, avec le code tel que je l'ai, j'ai un message d'erreur du type :
    Undefined index: nom in C:\wamp64\www\tests\index.php on line 63
    Et il y en a un par ligne.

    Dans mes tentatives, j'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT nom, prenom, prenom2, surnom, Vprenom1, Vprenom2, Vnom, DATE_FORMAT(naissance, "%d/%m/%Y") AS naissance, DATE_FORMAT(mort, "%d/%m/%Y") AS mort, photo, PersonnaliteLien, PersonnaliteAvatar
    	WHERE(YEAR(CURDATE())-YEAR(naissance)) - (SUBSTR(CURDATE(),5,5)<RIGHT(naissance,5)) AS age FROM personnalite
     
    	FROM personnalite 
    	ORDER BY ID DESC LIMIT 0, 1
    Et en erreur j'ai :
    Warning: PDO::query(): SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'WHERE(YEAR(CURDATE())-YEAR(naissance)) - (SUBSTR(CURDATE(),5,5)&lt;RIGHT(naissance,' à la ligne 2 in C:\wamp64\www\tests\index.php on line 53

    Fatal error: Call to a member function fetch() on boolean in C:\wamp64\www\tests\index.php on line 62

  4. #4
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    Par défaut
    D'accord. Alors, pour fusionner 2 requêtes SQL il ne s'agit pas de les concaténer, mais de comprendre ce qu'elles font. Tes deux requêtes travaillent sur la même table, et en extrait des informations. Ce sont ces informations qu'il faut mettre en commun.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT nom, prenom, prenom2, surnom, Vprenom1, Vprenom2, Vnom, DATE_FORMAT(naissance, "%d/%m/%Y") AS naissance, DATE_FORMAT(mort, "%d/%m/%Y") AS mort, photo, PersonnaliteLien, PersonnaliteAvatar, naissance AS naissance2,(YEAR(CURDATE())-YEAR(naissance)) - (SUBSTR(CURDATE(),5,5)<RIGHT(naissance,5)) AS age
    	FROM personnalite 
    	ORDER BY ID DESC LIMIT 0, 1

    A noter que j'ai renommé la colonne naissance de la seconde requête en naissance2, pour éviter d'avoir 2 colonnes qui portent le même nom...

    Je t'invite également, si tu as d'autres manipulations de requêtes à faire, à t'intéresser au langage SQL, ne serait-ce que pour apprendre les bases. D'une part, cela t'aurait permis de résoudre toi même le soucis dans le cas présent, et d'autres part, cela te permettra de mieux exposer tes soucis dans le cas de requête plus complexe (et donc trouver plus facilement de l'aide)

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Comptable
    Inscrit en
    Janvier 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2014
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    Merci

    Je me remets doucement dans le SQL. J'avais étudié ça en BTS il y a des années, mais ce n'était pas aussi complexe.

    Je ne pensais pas qu'on pouvait renommer une colonne comme ça et faire l'opération dessus en direct. J'ai beau fouiner, mais souvent je ne sais pas quoi rechercher là est le problème.

    Merci encore

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

Discussions similaires

  1. [VB.NET][ADO]Fusionner des dataTables
    Par neo.51 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 30/07/2005, 00h22
  2. requette sql compliqué sous delphi
    Par developpeur_mehdi dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/03/2004, 16h33
  3. Requette de joiture sql avec au moin 3 tables
    Par developpeur_mehdi dans le forum Bases de données
    Réponses: 3
    Dernier message: 06/03/2004, 08h10
  4. [] [Excel] Fusionner des cellules
    Par SamyD dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/12/2002, 18h37

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