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 :

SELECT dans clause WHERE [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut SELECT dans clause WHERE
    Bonjour à tous,
    Je voudrais réunir deux fonctions appelées successivement par une seule en incorporant une requête dans la clause WHERE. Il me manque quelque chose avec une variable MySQL que je n'arrive pas à intégrer.
    Ancien code à simplifier:
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    // Recherche des identifiants des conjoints avec lesquels la personne principale a eu des enfants
    function getSpousesWithCommonChildren($mainPersonId, $mainPersonGender)
    {
    	global $db;
     
    	if ($mainPersonGender == 'M')
    	{
    		$query = "
    			SELECT DISTINCT mother_id AS id
    			FROM dat_persons
    			WHERE father_id=:mainPersonId
    		;";
    	}
    	if ($mainPersonGender == 'F')
    	{
    		$query = "
    			SELECT DISTINCT father_id AS id
    			FROM dat_persons
    			WHERE mother_id=:mainPersonId
    		;";
    	}
    	$result = $db->prepare($query);
    	$result->bindParam('mainPersonId', $mainPersonId);
    	$result->execute();
    	$idsStack = '';
    	while ($id = $result->fetch())
    	{
    		$idsStack .= $id->id.',';
    	}
    	return $idsStack;
    }
     
    // Recherche des options pour lesquelles on connait les identifiants
    function getOptionsDataFromIdsStack(string $idsStack)
    {
    	global $db;
    	$idsStack = trim($idsStack, ", \t\n\r\0\x0B");
     
    	$query = OPTIONS_SELECT."
    		FROM dat_persons
    		WHERE id IN($idsStack)
    		ORDER BY last_name, first_name, birth_date
    	;";
    	$result = $db->query($query);
    	return $result->fetchAll();
    }
     
    $idsStack	= getSpousesWithCommonChildren($mainPerson->id, $mainPerson->gender);
    $persons	= getOptionsDataFromIdsStack($idsStack);
    Essai de nouveau code:
    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
    function getSpousesWithCommonChildren($mainPersonId, $mainPersonGender)
    {
    	global $db;
     
    	if ($mainPersonGender == 'M')
    	{
    		$where = "
    			SELECT DISTINCT mother_id AS id
    			FROM dat_persons
    			WHERE father_id=:mainPersonId
    		";
    	}
    	if ($mainPersonGender == 'F')
    	{
    		$where = "
    			SELECT DISTINCT father_id AS id
    			FROM dat_persons
    			WHERE mother_id=:mainPersonId
    		";
    	}
    	$query = OPTIONS_SELECT."
    		FROM dat_persons
    		WHERE ($where)
    		ORDER BY last_name, first_name, birth_date
    	;";
    	$result = $db->prepare($query);
    	$result->bindParam('mainPersonId', $mainPersonId);
    	$result->execute();
    	return $result->fetchAll();
    }
     
    $persons = getSpousesWithCommonChildren($mainPerson->id, $mainPerson->gender);

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    Pas sûr de tout comprendre à votre besoin mais essayez comme ceci, peut-être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $query = SELECT OPTIONS_SELECT."
    	FROM dat_persons
    	WHERE id IN ($where) -- Remplacez id par le vrai nom de la colonne à comparer.
    	ORDER BY last_name, first_name, birth_date
    ;";
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut
    Ah, merci, c'est exactement ce que je voulais, soit un gain de 18 lignes de code.

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    Pourquoi pas une jointure?

    A+.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut
    Parce que dans ce cas précis, je ne savais pas comment faire. C'est la réponse d'un âne mais puisque j'ai une solution rationnelle qui fonctionne...

  6. #6
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Teste ceci dans ton PHPmyadmin, mettons que tu cherches le père et / ou la mère de l'identifiant 4
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 
    c.id as child_id, c.nom as child_nom, c.prenom as child_prenom,
    f.id as father_id, f.nom as father_nom, f.prenom as father_prenom,
    m.id as mother_id, m.nom as mother_nom, m.prenom as mother_prenom
    FROM dat_persons c
    left join dat_persons f on c.id=f.id and c.father_id=4
    left join dat_persons m on c.id=m.id and c.mother_id=4
    WHERE c.id=4
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

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

Discussions similaires

  1. Select avec "date d'un premier élément" dans clause Where
    Par adrien357 dans le forum Requêtes
    Réponses: 9
    Dernier message: 05/11/2008, 15h27
  2. Réponses: 8
    Dernier message: 16/11/2006, 13h31
  3. Select dans clause Where
    Par Bisûnûrs dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/08/2006, 11h50
  4. [PL/SQL Oracle] Syntaxe dans clause where
    Par Misdrhaal dans le forum Oracle
    Réponses: 2
    Dernier message: 01/03/2006, 13h33
  5. INNER JOIN ... ON ... ou jointure dans clause where
    Par schmur1 dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 28/06/2005, 09h16

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