Requete entre deux tables

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Requete entre deux tables

Re: Requete entre deux tables

par Pauloscorps » 03 mai 2011, 11:15

Alors là je suis dégoutée. J'étais convaincue que cette requête allait fonctionner, et bah non. Comment ca se fait ? J'obtiens le même message d'erreur que précédemment. Je pensais vraiment y être arrivée...
				
$idParent = $monArticle->idParent;
				$req_nom_parent = 'SELECT nomCat FROM categories WHERE idCat = '.$idParent.';';
				$res_nom_parent = mysql_query($req_nom_parent, $connexion);
				if (!empty($res_nom_parent)) {
					while ($nomParent = mysql_fetch_object ($res_nom_parent)){
						echo $nomParent;
					}
				}
	
Là je pense que la requête est bonne, mais que le problème vient de l'exploitation de son résultat.

EDIT : Youpi ca marche, c'était effectivement bien un problème de PHP ! :mrgreen:
Voici la solution :
				$idParent = $monArticle->idParent;
				$req_nom_parent = 'SELECT * FROM categories WHERE idCat = '.$idParent.';';
				$res_nom_parent = mysql_query($req_nom_parent, $connexion);
				while($parent = mysql_fetch_object($res_nom_parent))
				{
		
				echo '<h4>' .$monArticle->titreArticle. '</h4>';
				echo '</div>';
				echo '<p class="chemin">' .$parent->nomCat. '  >>  ' .$monArticle->nomCat. '</p>';
				echo '<div class="photo"><img src="' .$monArticle->photoArticle. '" title="' .$monArticle->descPhoto.'" alt="' .$monArticle->descPhoto. '"/></img></div>';
				echo '<p class="corpsBlog">' .$monArticle->contenuArticle. '</p>';
				echo '<div class="clear"></div>';
				echo '<div class="basbloc"></div>';
				echo '</div>';
Merci à tous ceux qui ont participé à cette discussion.

Re: Requete entre deux tables

par Pauloscorps » 03 mai 2011, 10:12

Bonjour,

Voici mon code, qui me renvoie :

Code : Tout sélectionner

Catchable fatal error: Object of class stdClass could not be converted to string in C:\wamp\www\SMTK\index.php on line 55
	/**************************************************************/
				/********* Trouver le nom de la catégorie parente *************/
				/**************************************************************/
				$req_nom_parent = 'SELECT c.nomCat FROM articles AS a JOIN categories AS c ON c.idCat = a.idCat WHERE c.idParent = '.$monArticle->idParent.';';
				$res_nom_parent = mysql_query($req_nom_parent, $connexion);
				if (!empty($res_nom_parent))
				{
					while ($nomParent = mysql_fetch_object ($res_nom_parent))
					{
						echo $nomParent;
					}
				}
				/**************************************************************/
				echo '<h4>' .$monArticle->titreArticle. '</h4>';
				echo '</div>';
				echo '<p class="chemin">' .$nomParent. '  >>  ' .$monArticle->nomCat. '</p>';
				echo '<div class="photo"><img src="' .$monArticle->photoArticle. '" title="' .$monArticle->descPhoto. '" alt="' .$monArticle->descPhoto. '"/></img></div>';
				echo '<p class="corpsBlog">' .$monArticle->contenuArticle. '</p>';
				echo '<div class="clear"></div>';
				echo '<div class="basbloc"></div>';
				echo '</div>';
La ligne 55 est le echo $nomparent.

Re: Requete entre deux tables

par Patriboom » 26 avr. 2011, 17:57

As-tu appliqué le code de jojolapine
SELECT
    a.*, 
    c.nomCat 
FROM 
    articles AS a
JOIN
    categories AS c
ON
    c.idCat = a.idCat
WHERE
    a.date_posted = NOW()
Si oui, quels sont les résultats?
("Ça ne marche" n'est pas une réponse , on veut des détails).

Re: Requete entre deux tables

par Mazarini » 26 avr. 2011, 10:54

Bonjour,

Si on regarde le print_r que tu affiches, il n'y a pas de nomCat. Donc pas étonnant que tu aies une erreur.

Vérifie ton select, il fonctionne, mais de modif en modif tu as du supprimer nomCat de la liste des colonnes.

Re: Requete entre deux tables

par Pauloscorps » 26 avr. 2011, 09:53

Bonjour,

Je me permets de remonter cet article car je n'ai toujours pas trouvé la solution à mon problème, après plus d'une semaine de recherche.
Si une âme charitable voulait bien me donner cette solution et m'expliquer, ce serait super.

Merci d'avance, je désespère.

Re: Requete entre deux tables

par Pauloscorps » 18 avr. 2011, 16:17

Ah merci, je ne connaissais pas cette fonction et elle est bien utile :D
Pour ce qui est de ma requete, je n'arrive pas à trouver. J'ai tout le raisonnement logique, mais un niveau de la synthaxe, je n'y arrive pas. Je n'ai pas idée de comment rédiger cela :

On sait que a.idCat = c.idCat
Donc c.idCat prend la valeur de a.idCat
A partir de c.idCat, on récupère nomCat qui se trouve dans la même table.

Quelqu'un peut-il m'expliquer comment rédiger cela en PHP/MySQL ?

EDIT : Le texte affiché par print_r (get_objects_vars($categorie));

Array ( [idArticle] => 2 [idCat] => 5 [titreArticle] => Un titre ! [photoArticle] => http://localhost/smtk/photos/image.jpg [descPhoto] => alt de la photo [dateArticle] => 2011-04-07 14:12:49 [contenuArticle] => contenu de larticle) 

Re: Requete entre deux tables

par macgawel » 18 avr. 2011, 15:53

J'obtiens un magnifique "Undefined index" en ligne 26, c'est-à-dire : "$nomCat = $categorie->nomCat;".
Une suggestion ?
print_r ( get_object_vars( $categorie) );

Re: Requete entre deux tables

par Pauloscorps » 18 avr. 2011, 15:42

Bonjour,

Merci des vos réponses.
J'ai testé ta requête Jojolapine, et a priori, je n'arrive pas à récupérer quelque chose :x

Voici mon code :
	
$req = 'SELECT a.*, c.nomCat FROM articles AS a, categories AS c WHERE a.idCat=c.idCat AND c.idCat = "'.$idCat.'";';
$result = mysql_query ($request, $connexion);
if (!empty($result) or die(mysql_error()))
{
        while ($categorie = mysql_fetch_object($result))
	{
		$nomCat = $categorie->nomCat;
		echo $nomCat;
	}
}
J'obtiens un magnifique "Undefined index" en ligne 26, c'est-à-dire : "$nomCat = $categorie->nomCat;".
Une suggestion ?

Re: Requete entre deux tables

par jojolapine » 15 avr. 2011, 08:50

Je ne sais pas exactement, c'était compris dans une formation anaska...
Mais à priori tout est indiqué ici : http://shop.zend.com/fr/php-certificati ... ucher.html

Ouala fin du HS

Re: Requete entre deux tables

par devlop78 » 15 avr. 2011, 00:59

"Juste pour test". Je vais en profiter pour suggérer le passage à une extension plus appropriée telle que mysqli ou PDO. Le "OR DIE()" ne sera même plus nécessaire car en une seule ligne, l'extension renverra une exception en cas d'erreur. Et comme tu n'auras pas attrapée les exceptions, tu auras une erreur fatale (catchable error) avec un magnifique descriptif de ce qui ne va pas. Au pire, en production, tu pourras utiliser un ééééénorme try catch si tu n'as pas le courage de gérer les erreurs proprement.

Au fait Jojo La Pine (lol :) ), c'est 150 euros le prix pour participer au concourt Zend ?

Re: Requete entre deux tables

par jojolapine » 14 avr. 2011, 22:42

Bonsoir,
C'est normal que ça ne fonctionne pas, tu notes a.nomCat hors nomCat ne fait partit de la table articles...

Essaye cette requête:
SELECT
    a.*, 
    c.nomCat 
FROM 
    articles AS a, 
    categories AS c 
WHERE 
    a.idCat=c.idCat AND
    a.date_posted = NOW();
Normalement tu devrais avoir tes articles avec le nom de la catégorie associée.
Si tu veux tu peux aussi le faire avec une jointure explicite:
SELECT
    a.*, 
    c.nomCat 
FROM 
    articles AS a
JOIN
    categories AS c
ON
    c.idCat = a.idCat
WHERE
    a.date_posted = NOW() 
J'ai rajouté une condition bidon sur la selection des articles pour que tu comprennes où ça doit être placé...
Si tu as des questions...

Re: Requete entre deux tables

par macgawel » 14 avr. 2011, 14:19

En fait le problème survient lorsque j'essaie de faire $monArticle->nomCat, rectification.
Trying to get property of non-object" => Essaye d'obtenir une propriété de quelque-chose qui n'est pas un objet.
Neuf chances sur dix que le problème vient de ton $monArticle->nomCat...
Tu peux déjà faire un echo $monArticle->nomCat histoire de voir ce que ça te retourne...

Pense aussi - juste pour les tests - à l'affichage des erreurs :
Sachant que la plupart des fonctions appelant une BDD retourne FALSE en cas d'erreur, et qu'on peut récupérer le message d'erreur (avec mysql_error() pour MySQL) tu peux l'afficher si problème.

Exemple avec les fonctions mysql_ :
$result = mysql_query ( $marequete) OR DIE ("Erreur sur $marequete : ".mysql_error() );

Re: Requete entre deux tables

par Pauloscorps » 13 avr. 2011, 10:09

Salut et merci de ta réponse,

En fait le problème survient lorsque j'essaie de faire $monArticle->nomCat, rectification.

Re: Requete entre deux tables

par macgawel » 12 avr. 2011, 16:46

Trying to get property of non-object" => Essaye d'obtenir une propriété de quelque-chose qui n'est pas un objet.
Neuf chances sur dix que le problème vient de ton $monArticle->idCat...

Requete entre deux tables

par Pauloscorps » 12 avr. 2011, 14:09

Bonjour à tous,

Voilà quelques jours déjà que je suis confrontée à un problème, d'apparence simple, mais qui s'est vite avéré compliqué.
Je dispose en fait de deux tables :

articles categories
idArticle idCat
idCat nomCat
titreArticle idParent
contenuArticle
photoArticle
descPhoto

J'aimerais en fait récupèrer le nom de la catégorie à partir de l'idCat que j'ai dans la table "articles", et... IMPOSSIBLE.
J'ai d'ores-et-déjà essayé la requete suivante :
' SELECT c.idCat, a.nomCat FROM articles a, categories c WHERE a.idCat=c.idCat and ' .$monArticle->idCat. ' = c.idCat;'; 
La synthaxe est certinament mauvaise (j'ai été obligée de la recopier sur le forum, mais je l'ai faites avec une synthaxe correcte et à chaque fois, j'ai eu le message "Trying to get property of non-object" etc.

Je vous prie donc de bien vouloir m'éclairer, parce que se prendre la tête pour des futilités pareilles, c'est dérangeant.

Merci d'avance,
Pauline.