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 :

requête triée en fonction de deux champs [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut requête triée en fonction de deux champs
    Bonjour à toutes et à tous,
    j'essaye de faire une requête triée en fonction de deux champs et je n'y arrive pas.
    voici mon script :
    Code : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    <?php
    	/* ------------------------------------------------------------------------------------------------------------------------------------------- */
    	/* Requête d'extraction d'une table identifiée par l'argument '$NomTabEntr' dans la base $nom_du_serveur = "mysql:host=localhost;dbname=MaBase"; */
    	/* ------------------------------------------------------------------------------------------------------------------------------------------- */
    	function RequeteExtrac($NomTabEntr, $Champ1, $Champ2)
    	{
    		$TabRslt = Array();		// Création et initialisation de variable qui contiendra le résultat de la requête
    		$TabRenv = Array();		// Création et initialisation de variable qui contiendra la table renvoyée par la fonction
    		$LignPHP = Array();		// Création et initialisation de variable : 1 ligne de la table
    		$Tretour = Array(); 	// création et initialisation de la variable de retour de la fonction
     
    		/*-----------------------------------------------------*/
    		/* Informations pour la connexion à la base de données */
    		/*-----------------------------------------------------*/
    		$nom_du_serveur  = "mysql:host=localhost;dbname=MaBase";
    		$nom_utilisateur = "MonUtilisateur";
    		$mot_de_passe    = "MonMotDePasse";
     
    		 $options         = array(
    			PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8",
    			PDO::ATTR_CASE               => PDO::CASE_LOWER,
    		);
     
    		// Si tout va bien, on peut continuer
    		/*---------------------------------------*/
    		/* Connexion au Serveur en utilisant PDO */
    		/*---------------------------------------*/
    		try //  PHP essaie d'exécuter les instructions à l'intérieur du bloc try. S'il y a une erreur, il rentre dans le bloc catch et fait ce qu'on lui demande (ici, on arrête l'exécution de la page en affichant un message décrivant l'erreur).
    		{
    			$bdd = new PDO($nom_du_serveur, $nom_utilisateur, $mot_de_passe, $options); // Instance de l'objet PDO (notre connexion)
    		}
    		catch (Exception $e) // S'il y a une erreur, il rentre dans le bloc catch et fait ce qu'on lui demande (ici, on arrête l'exécution de la page en affichant un message décrivant l'erreur).
    		{
    			echo "Connection à MySql impossible : ", $e->getMessage();
    			die();    // En cas d'erreur, on affiche un message et on arrête tout
    		}
     
    		// Si tout va bien, on peut continuer
    					// NomTabEntr	: nom de la table MySQL : 'MaTable'
    					// $Champ1		: Nom du champ de 1er tri 'NOM'
    					// $Champ2		: Nom du champ de 2ème tri 'PRENOM'
    		$TabRslt = $bdd->query('SELECT * FROM '.$NomTabEntr.' ORDER BY '.$Champ1.','.$Champ2);// On récupère tout le contenu de la table '$NomTabEntr' reçue en paramètre par la fonction et triée en fonction des champs '$Champ1' puis '$Champ2'
    		$TabRslt->setFetchMode(PDO::FETCH_ASSOC);
     
    		// les deux boucles imbriquées 'foreach', ci-dessous, servent à créer un tableau PHP '$TabRenv' contenant la table demandée à la fonction
    		// Le premier foreach() lit chaque ligne du tableau
    		foreach($TabRslt as $LignTab) 			// la boucle foreach : à chaque tour de boucle, la valeur de l'élément suivant, du tableau $TabRslt, est mise dans la variable $LignTab (qui est elle même un tableau).
    		{
    			// Le deuxième foreach() lit chaque tableau de chaque ligne. On accède à ses propriétés et à ses valeurs avec les variables $cle et $valeur.
    			//foreach($LignTab as $cle=>$valeur) 		// la boucle foreach : à chaque tour de boucle, la valeur de l'élément suivant, du tableau $LignTab, est mise dans la variable $element.
    			foreach($LignTab as $valeur) 		// la boucle foreach : à chaque tour de boucle, la valeur de l'élément suivant, du tableau $LignTab, est mise dans la variable $valeur.
    			{
    				Array_push($LignPHP,$valeur);	// Je rentre la valeur contenue dans '$valeur' dans '$LignPHP' 
    			}
    			Array_push($TabRenv,$LignPHP); 		// Je rentre la valeur contenue dans '$LignPHP' dans '$TabRenv'
    			$LignPHP = Array();					// pour vider mon tableau de ligne je le redéfinis
    		}
     
    		$TabRslt->closeCursor(); 				// Termine le traitement de la requête
     
    		$Tretour = json_encode($TabRenv);		// json_encode() Retourne la représentation JSON d'une valeur (Toutes les chaînes doivent être encodées UTF-8). Retourne une chaîne encodé JSON ou FALSE si une erreur survient. 
    		return $Tretour;
    	}
    	/* ---------------------------------------------------------------------------------------------------------------- */
    	/* Fin de la Requête d'extraction d'une table identifiée par l'argument '$NomTabEntr' dans la base $nom_du_serveur = "MaBase"; */
    	/* ---------------------------------------------------------------------------------------------------------------- */
     
    ?>
    mon appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    	// 'MaTable'	: nom de la table MySQL
    	// 'NOM'		: Nom du champ de 1er tri
    	// 'PRENOM'		: Nom du champ de 2ème tri
    	$Tattendue = json_decode(RequeteExtrac('MaTable', 'NOM', 'PRENOM')); 	//json_decode — Décode une chaîne JSON (Cette fonction ne traite qu'avec des chaînes encodées avec UTF-8). Récupère une chaîne encodée JSON et la convertit en une variable PHP. Retourne la valeur encodée dans le paramètre json dans le type PHP approprié.
    ?>
    je récupère ma table, mais elle n'est pas triée. D’où vient mon erreur ?
    merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    function ... {
    $champs = $champ1.' DESC, '.$champ2.' DESC';
    $TabRslt = $bdd->query('SELECT * FROM $NomTabEntr ORDER BY $champs');
    }
    ?>

  3. #3
    Membre éclairé Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut
    Merci bonjourajax,
    mais même en tri inverse ça ne fonctionne pas.

  4. #4
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Par défaut
    Bonjour MelkInarian,
    Essaye cette requete seule sans l'inclure dans une fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    $bdd = new mysqli($nom_du_serveur, $nom_utilisateur, $mot_de_passe, $nom_base_de_donnees);
    $champs = $champ1.' DESC, '.$champ2.' DESC';
     
    $TabRslt = $bdd->query('SELECT * FROM $NomTabEntr ORDER BY $champs');
    while($LignTab = $TabRslt->fetch_assoc())
    {
        var_dump($LignTab);
    }
    ?>

  5. #5
    Membre éclairé Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut
    Bonjour bonjourajax,
    J'ai fait plusieurs essais avec le code fourni et adapté (recopié ici),
    Code : 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
    <?php
    	$nom_du_serveur  = "MonServeur";
    	$nom_utilisateur = "MonUtl";
    	$mot_de_passe    = "Pswd";
    	$nom_base_de_donnees    = 'MaBase';
    	$NomTabEntr		= 'MaTable';
    	$champ1 = 'NOM';
    	$champ2 = 'PRENOM';
     
    	$bdd = new mysqli($nom_du_serveur, $nom_utilisateur, $mot_de_passe, $nom_base_de_donnees);
    	$champs = $champ1.' DESC, '.$champ2.' DESC';
     
    	$TabRslt = $bdd->query('SELECT * FROM $NomTabEntr ORDER BY $champs');
    	while($LignTab = $TabRslt->fetch_assoc())
    	{
    		var_dump($LignTab);
    	}
    ?>
    et le dernier avec une page vierge si ce n'est l'ossature de page, et j'ai toujours une erreur :
    Fatal error: Call to a member function fetch_assoc() on a non-object in D:\MonChemin\MaPage.php on line 44
    La ligne 44 (correspondant à la ligne 14 ci-dessus) contenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while($LignTab = $TabRslt->fetch_assoc())
    Merci

  6. #6
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Par défaut
    Bonjour MelkInarian,
    en mettant juste ce code dans un fichier séparé

    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
     
    <?php
    	$nom_du_serveur  = "MonServeur";
    	$nom_utilisateur = "MonUtl";
    	$mot_de_passe    = "Pswd";
    	$nom_base_de_donnees    = "MaBase";
    	$NomTabEntr		= 'MaTable';
    	$champ1 = 'NOM';
    	$champ2 = 'PRENOM';
     
    	$bdd = new mysqli($nom_du_serveur, $nom_utilisateur, $mot_de_passe, $nom_base_de_donnees);     
    	$TabRslt = $bdd->query("SELECT * FROM $NomTabEntr ORDER BY $champ1, $champ2");
    	while($LignTab = $TabRslt->fetch_assoc())
    	{
    		var_dump($LignTab);
    	}
    ?>

    Chez moi ça fonctionne bien, une erreur de faute de frappe ?

    Et il faut enlever ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $TabRslt = Array();		// Création et initialisation de variable qui contiendra le résultat de la requête;

  7. #7
    Membre éclairé Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut
    Même problème avec ce script !
    J'ai fait un test, avec ce dernier script, en remplaçant les noms de variables par leur contenu et là çà fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    	$bdd = new mysqli('MonServeur', 'MonUtl', 'Pswd', 'MaBase');
            $req = 'SELECT * FROM MaTable ORDER BY NOM, PRENOM';
    	$TabRslt = $bdd->query($req);
    	while($LignTab = $TabRslt->fetch_assoc())
    	{
    		var_dump($LignTab);
    	}
    ?>
    j'ai bien un affichage de ma table triée.
    Je vais donc faire sans noms de variables pour le moment.
    Merci beaucoup bonjourajax.
    et si, pour mon information, quelqu'un peut dire où j'ai commis une erreur j'en serai heureux.
    en attendant je poste résolu.

  8. #8
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Par défaut
    De rien MelkInarian,

    L'erreur dans le dernier script il faut utiliser les double quote

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $req="SELECT * FROM $NomTabEntr ORDER BY $champ1, $champ2";

  9. #9
    Membre éclairé Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut
    Merci, je ne l'avais pas vu.

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

Discussions similaires

  1. Requête SQL en fonction d'un champ d'un enregistrement
    Par mcorvaisier dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/02/2011, 17h12
  2. [MySQL] Mysql Requête UPDATE en fonction d'une date
    Par xunil2003 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 27/03/2010, 02h20
  3. [AC-2000] msgbox d'erreur en fonction de deux champs
    Par polo31 dans le forum VBA Access
    Réponses: 4
    Dernier message: 06/07/2009, 10h31
  4. Requête sur date éclatée en deux champs
    Par ascalia dans le forum Langage SQL
    Réponses: 5
    Dernier message: 08/10/2008, 14h21

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