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 :

LIKE CONCAT dans un LEFT JOIN [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 341
    Par défaut LIKE CONCAT dans un LEFT JOIN
    Bonjour,

    J'ai un petit soucis avec une requête qui me semble correcte, mais ne me donne pas la valeur de ma BDD

    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
     
    $s_prop_actif_moniteur_section_explode=explode('-',$s_prop_actif_moniteur_section);
    $s_prop_actif_moniteur_section_explode_count=count($s_prop_actif_moniteur_section_explode);
     
    print "<div class=\"div_space_5\">&nbsp;</div>";
    print "<div class=\"div_left_25\" align=\"right\">Cours donnés : &nbsp;</div>";
    print "<div style=\"float : left; width: 74%;\">";
    	for ($i=0; $i<$s_prop_actif_moniteur_section_explode_count; $i ++) {
    		$section=$s_prop_actif_moniteur_section_explode[$i];
     
    		// ---------- Liste des cours de la section
    		$reponse=mysqli_query($conn_cecs,"SELECT * 
    			FROM 04_cours_classe classe
    				INNER JOIN 04_cours_section section ON classe.cours_classe_section_id=section.cours_section_id 
    				LEFT JOIN (SELECT * From 00_compta_indemnites WHERE compta_indemnites_date_id='$s_cours_jour_date_id') indemnites ON classe.cours_classe_id LIKE CONCAT(';', indemnites.compta_indemnites_classes_id, ';') 
    			WHERE cours_section='$section' && cours_classe_actif='oui'
    			ORDER BY cours_classe_nom") or die(mysqli_error($conn_cecs));
    		while ($in=mysqli_fetch_array($reponse)) {
    			$classe_nom=$in['cours_classe_nom'];
    			$classe_id=$in['cours_classe_id'];
    			$classe_donne=$in['compta_indemnites_id'];
     
    			print "<div style=\"float: left; width: 19.5%; text-align: center; padding-bottom: 8px; color: #666;\">";
    				print "$classe_nom - $classe_donne -<br />";
    				print "<input type=\"checkbox\" value =\"$classe_id\" />";
    			print "</div>";
    		}
    		print "<div class=\"div_space_5\">&nbsp;</div>";
    	}
    print "</div>";
    Les différentes "$classe_id" qui me sont retournées sont correctes : 8 - 9 - 11 et 13
    Par contre pour la table "00_compta_indemnites" avec le critère demandé, le champs "compta_indemnites_classes_id" a la valeur : ';11;' qui fait bien partie de la liste ci-dessus !

    Ma variable "$classe_donne" reste vide, ce qui me pose un problème car devrait cocher le checkbox si le cours a déjà été sélectionné au paravent (pas encore intégré dans mon code).

    Votre aide serait la bienvenue.

    @+
    DDAWEB

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Pourquoi tu mets des ; autour de ta valeur ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre chevronné Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 341
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Pourquoi tu mets des ; autour de ta valeur ?
    Il y a une autre application qui utilise un LIKE pour afficher les photos des moniteurs sur un écran : j'ai du bien identifier chaque classe ID afin de ne pas avoir de problème avec LIKE 13 ou LIKE 1 qui me donneraient une réponse positive.
    S'il y a plusieurs classe ID, ex. : ;1;10;14;

    Edit : j'aurais aussi bien pu mettre : -1-10-14- ... un simple choix

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu veux dire que ta colonne cours_classe_id contient litteralement ";8;9;11;13;" ?

    Si c'est oui la vraie bonne réponse est de changer la structure de ta base de données en mettant une valeur par ligne. Tout le reste serait du bidouillage.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre chevronné Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 341
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu veux dire que ta colonne cours_classe_id contient litteralement ";8;9;11;13;" ?
    Non, c'est la lecture de la boucle des classes ID en fonction de '$section'

    Je vais essayer de t'expliquer :
    Il existe plusieurs sections, dans notre cas actuellement : 4B, 4C, 5A et 5B (c'est les dénominations officielles de notre fédération ... dans un soucis de facilité j'ai utilisé la même nomenclature)
    Pour chaque section, il y a des classes. J'utilise une table relationnelle, je travaille donc avec l'ID de chaque classe.
    Pour la section 4C de l'exemple, les ID sont : 8, 9, 11, et 13

    Par contre, la variable "$classe_donne" provient de la table "00_compta_indemnites" avec le champs dont je souhaite obtenir la valeur "compta_indemnites_classes_id"

    Citation Envoyé par sabotage Voir le message
    Si c'est oui la vraie bonne réponse est de changer la structure de ta base de données en mettant une valeur par ligne. Tout le reste serait du bidouillage.
    Pour être court, chaque personne n'a qu'une seule ligne !

    NB : j'ai constaté une erreur dans ce que j'ai posté (a été un peu modifié pour cerner la date "$s_cours_jour_date_id" et la personne "$s_prop_actif_id"), voici le code actuel :
    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
     
    		$s_prop_actif_moniteur_section_explode=explode('-',$s_prop_actif_moniteur_section);
    		$s_prop_actif_moniteur_section_explode_count=count($s_prop_actif_moniteur_section_explode);
     
    		print "<div class=\"div_space_5\">&nbsp;</div>";
    		print "<div class=\"div_left_25\" align=\"right\">Cours donnés : &nbsp;</div>";
    		print "<div style=\"float : left; width: 74%;\">";
    			for ($i=0; $i<$s_prop_actif_moniteur_section_explode_count; $i ++) {
    				$section=$s_prop_actif_moniteur_section_explode[$i];
     
    				// ---------- Liste des cours de la section
    				$reponse=mysqli_query($conn_cecs,"SELECT * 
    					FROM 04_cours_classe classe 
    						LEFT JOIN (SELECT * From 00_compta_indemnites WHERE compta_indemnites_date_id='$s_cours_jour_date_id' && compta_indemnites_prop_id='$s_prop_actif_id') indemnites ON classe.cours_classe_id LIKE (CONCAT(';',indemnites.compta_indemnites_classes_id,';')) 
    						INNER JOIN 04_cours_section section ON classe.cours_classe_section_id=section.cours_section_id 
    					WHERE cours_section='$section' && cours_classe_actif='oui'
    					ORDER BY cours_classe_nom") or die(mysqli_error($conn_cecs));
    				while ($in=mysqli_fetch_array($reponse)) {
    					$classe_nom=$in['cours_classe_nom'];
    					$classe_id=$in['cours_classe_id'];
    					$classe_donne=$in['compta_indemnites_classes_id'];
     
    					print "<div style=\"float: left; width: 19.5%; text-align: center; padding-bottom: 8px; color: #666;\">";
    						print "$classe_nom - $classe_donne - $classe_id<br />";
    						print "<input type=\"checkbox\" value =\"$classe_id\" />";
    					print "</div>";
    				}
    				print "<div class=\"div_space_5\">&nbsp;</div>";

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    C'est plutôt le contenu de tes tables qu'il faudrait expliciter.
    Si ta colonne cours_classe_id contient la valeur 11 par exemple, pourquoi tu cherches ";11;" dans compta_indemnites_classes_id ?

    D'ailleurs pourquoi faire un LIKE puisque tu cherches une valeur exacte ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. Utiliser MAX() en condition dans un LEFT JOIN
    Par comode dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/05/2012, 21h49
  2. [MySQL] Select dans un Left Join et champ inconnu
    Par wenijah dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 13/04/2012, 12h19
  3. "fetch first 1 rows only" dans un "Left Join"
    Par nico.exe dans le forum DB2
    Réponses: 5
    Dernier message: 02/04/2012, 16h25
  4. Requete SQL - count dans un left join
    Par JbWillGetYou dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/06/2010, 01h07
  5. count() dans *plusieurs* LEFT JOIN
    Par silver_dragoon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/06/2004, 17h20

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