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 :

sélectionner un élément d'un SELECT [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Points : 575
    Points
    575
    Par défaut sélectionner un élément d'un SELECT
    bonjour
    voilà j'aimerais pourvoir selectionner un seul résultat d'un ensemble de résultat d'un select

    voici la requete dont je parle :

    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
     
    $sql1 = "SELECT num_chambre
             FROM appartenir 
             WHERE num_categorie = '".$personne."'
             AND num_chambre NOT IN 
                (
                    SELECT num_chambre 
                    FROM reserver 
                    WHERE date_arrivee = '".$date."'
                    AND date_depart = '".$date1."'
                )"; 
     
    if($tab_com = mysql_query($sql1))
    {
      while ($dispo=mysql_fetch_array($tab_com))
     {
      echo $dispo[0]."<br>";
     }
     }
    le résultat de cette requete est :
    1,2,5,6,7 ... (num_chambre)

    et je voudrais inserer dans une requete un seul résultat soit, par exemple, '2' ((num_chambre))

    requete d'insertion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $requete66 = "INSERT INTO reserver (num_chambre, id_client, num_reservation, date_arrivee, date_depart)
         VALUES 'RESULTAT DE MA REQUETE SELECT', '2', '3', '$date', '$date1')";
         echo $requete66;
     if($add_reserve = mysql_query($requete66))
        {
        $rowaddreserve = mysql_affected_rows($add_reserve);
        echo $rowaddreserve;
      }
    else 
    {
      echo "REQUETE PAS BONNE"; 
      }
    merci beaucoup

  2. #2
    Membre averti Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Points : 362
    Points
    362
    Par défaut
    Il faut pour cela que tu fasses ton INSERT dans la boucle qui récupère les résultats de ton SELECT.

  3. #3
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Salut,

    alors deja si tu n'as besoin que d'un seul enregistrement il existe une clause SQL pour cela -> LIMIT.

    Qui s'utilise ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $sql1 = "SELECT num_chambre 
             FROM appartenir 
             WHERE num_categorie = '".$personne."' 
             AND num_chambre NOT IN 
                ( 
                    SELECT num_chambre 
                    FROM reserver 
                    WHERE date_arrivee = '".$date."' 
                    AND date_depart = '".$date1."' 
                )
    LIMIT 0,1";
    Ensuite comme le dit nicoaix il faut que tu réslies l'insertion juste après le fetch.

    En gros voila comment se devrait être :

    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
    $sql1 = "
    	SELECT num_chambre 
    	FROM appartenir 
    	WHERE num_categorie = '".$personne."' 
    	AND num_chambre NOT IN 
    	( 
    		SELECT num_chambre 
    		FROM reserver 
    		WHERE date_arrivee = '".$date."' 
    		AND date_depart = '".$date1."' 
    	)
    	LIMIT 0,1"; 
     
    $tab_com = @mysql_query($sql1);
     
    if( $tab_com != false)
    {
    	$dispo=mysql_fetch_array($tab_com);
    	if( $dispo != false)
    	{
    		$requete66 = "	INSERT INTO reserver (num_chambre, id_client, num_reservation, date_arrivee, date_depart) 
         				VALUES 'RESULTAT DE MA REQUETE SELECT', '2', '3', '$date', '$date1')"; 
        		//echo $requete66; 
    		if($add_reserve = mysql_query($requete66))
    		{ 
    			$rowaddreserve = mysql_affected_rows($add_reserve); 
    		}
    		else
    		{
    			echo "pom pom une erreur ->".mysql_errno()." : ".mysql_error();
    		}
    	}
    	else
    	{
    		echo "Plus de chambre dispo ?!";
    	}
    }
    else
    {
    	echo "pom pom une erreur ->".mysql_errno()." : ".mysql_error();
    }
    bye

  4. #4
    Membre confirmé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Points : 575
    Points
    575
    Par défaut
    ton code m'a l'air très bien!!

    mais ya un petit soucis ..
    il me dit que " Warning: mysql_affected_rows(): supplied argument is not a valid MySQL-Link resource in c..."
    au niveau de :
    " $rowaddreserve = mysql_affected_rows($add_reserve);"


  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Deux trucs me chiffonnent ici :
    • l'arobase
    • le manque de or die(mysql_error())


    Je suis persuadé que, avec un petit or die(), tu verras la cause de ton autre erreur


    [Edit] Les tests du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($variable != FALSE)
    sont en tout points équivalents à :
    à un détail près : ils obligent PHP à faire une comparaison inutile (à moins que PHP passe par une phase d'optimisation, ce qui ne métonnerait pas outre mesure).

  6. #6
    Membre confirmé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Points : 575
    Points
    575
    Par défaut
    pour l'arobase je l'avais enlevé

    sinon pour le reste :

    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
     
     
    $sql1 = "SELECT num_chambre
             FROM appartenir 
             WHERE num_categorie = '".$personne."'
             AND num_chambre NOT IN 
                (
                    SELECT num_chambre 
                    FROM reserver
                    WHERE date_arrivee = '".$date."'
                    AND date_depart = '".$date1."'
                ) LIMIT 0,1";
     
    if($tab_com = mysql_query($sql1))
    {
      while ($dispo=mysql_fetch_array($tab_com))
     {
      $requete66 = "INSERT INTO reserver (num_chambre, id_client, num_reservation, date_arrivee, date_depart)
         VALUES (".$dispo[0].", '2', '3', '$date', '$date1')" ;
         echo $requete66;
     
     if($add_reserve = mysql_query($requete66) or die('Erreur SQL !'.$requete66.'<br>'.mysql_error()))
      //if ($add_reserve === FALSE)
      {
        [b]$rowaddreserve = mysql_affected_rows($add_reserve);[/b]    echo $rowaddreserve;
      }
    else 
    {
      echo "REQUETE PAS BONNE"; 
      }
      echo $dispo[0]."<br>";
     }
     }
    erreur à ce niveau là ==> $rowaddreserve = mysql_affected_rows($add_reserve);

    ps : j'ai changé de code, j'avais testé celui de ePoX, mais ça me donne la meme erreur... au même endroit

  7. #7
    Membre confirmé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Points : 575
    Points
    575
    Par défaut
    j'ai rajouté le "or die('Erreur SQL !'.$sql1.'<br>'.mysql_error())" mais ça ne me donne pas d'erreur

    sinon, j'ai laissé :
    et
    et j'ai comme erreur :
    Warning: mysql_affected_rows(): supplied argument is not a valid MySQL-Link resource in c:

    et sinon si je l'enleve soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    if( $tab_com )
    ....
    ça me donne le même résultat, ce qui est normal

    mais si je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    if( $tab_com === true)
    ....
       if( $dispo === true)
    ....
    ça me mets comme erreur :
    "pom pom une erreur ->0 : "

    et si je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if( $tab_com == true)
    { 
      ...
       if( $dispo == true)
    ...
    bammmm encore l'erreur :
    Warning: mysql_affected_rows(): supplied argument is not a valid MySQL-Link resource in

    et pour finir, si je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    if( $tab_com )
    { 
    ....   
       if( $dispo)
    ...
    toujours la même erreur :
    Warning: mysql_affected_rows(): supplied argument is not a valid MySQL-Link resource in

    j'ai l'impression de tourner en rond

  8. #8
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Les tests du genre :
    Code:
    if ($variable != FALSE)

    sont en tout points équivalents à :
    Code:
    if ($variable)

    à un détail près : ils obligent PHP à faire une comparaison inutile (à moins que PHP passe par une phase d'optimisation, ce qui ne métonnerait pas outre mesure).
    Oui surement, par contre c'est moins lisible. C'est comme les variables interpétés entre simple (ou double) quote, je trouve que c'est rajouter de la difficulté de lecture inutilement à une tierce personne qui repasserait derrière.
    Par contre je ne doute absolument pas de ta remarque.

    Sinon pour ton problème océane, plusieurs points.

    Ceci me parait douteux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if($add_reserve = mysql_query($requete66) or die('Erreur SQL !'.$requete66.'<br>'.mysql_error())) 
      { 
        [b]$rowaddreserve = mysql_affected_rows($add_reserve);[/b]    echo $rowaddreserve; 
      }
    A la place je ferais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $add_reserve = mysql_query($requete66) or die('Erreur SQL !'.$requete66.'<br>'.mysql_error());
    $rowaddreserve = mysql_affected_rows();
    Pour rappel, mysql_affected_rows n'à que des parametres optionnels. Et le pramatere en question correspond au link_identifier. Cette donnée étant renvoyée par mysql_connect().

    Voila pourquoi tu avais une erreur.

    Sinon entre le or die ou le teste sur == false, il faut choisir. Mettre les deux est inutile. Je te laisse y réfléchir.

    Bye

  9. #9
    Membre confirmé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Points : 575
    Points
    575
    Par défaut
    oki merci

    c'est cool !!

    j'ai un autre soucis mais je vais poster un nouveau sujet

    merci encore!!

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

Discussions similaires

  1. [javascript] Sélectionner l'option d'un select
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 26/10/2005, 17h35
  2. [TTreeview] Comment sélectionner un élément de l'arbre ?
    Par altahir007 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 14/04/2005, 13h44
  3. Réponses: 15
    Dernier message: 21/06/2004, 16h52
  4. Réponses: 2
    Dernier message: 10/05/2004, 11h20
  5. Pré-sélectionner un élément d'une combobox
    Par delphim dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/06/2003, 15h26

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