OVH Cloud OVH Cloud

pb mysql_fetch_object sur LEFT JOIN

9 réponses
Avatar
CrazyCat
Avec un script du genre:
<?
$sql = "SELECT table1.id, table1.author, table1.comment, table2.mail FROM
database INNER JOIN table1 ON table2.id = table1.id_auth";
$req = mysql_query($sql);
?>
je cherche désèspéremment à savoir ce que je retrouve en effectuant un <?
$myobj = mysql_fetch_object($req); ?>

A priori, je dois avoir quelque chose genre $myobj->table1.id,
$myobj->table1.author, $myobj->table1.comment, $myobj->table2.mail ?

Je n'arrive pas à récupérer les valeurs :(

--
CrazyCat from C-P-F.org

9 réponses

Avatar
Matchenul
Avec un script du genre:
<?
$sql = "SELECT table1.id, table1.author, table1.comment, table2.mail FROM
database INNER JOIN table1 ON table2.id = table1.id_auth";
$req = mysql_query($sql);
?>
je cherche désèspéremment à savoir ce que je retrouve en effectuant un <?
$myobj = mysql_fetch_object($req); ?>

A priori, je dois avoir quelque chose genre $myobj->table1.id,
$myobj->table1.author, $myobj->table1.comment, $myobj->table2.mail ?

Je n'arrive pas à récupérer les valeurs :(
non, tu doit avoir :

$myobj->author, $myobj->comment, $myobj->mail
mais dans ces cas là, il vaut mieux :
$sql = "SELECT table1.id as t1_id, table1.author as t1_auth, table1.comment
as t1_comment, table2.mail as t2_mail FROM .....
et ensuite :
$myobj->t1_auth ...

voilà voilà
bon courage ;)

Avatar
- Sebastien -
CrazyCat écrivait :

Avec un script du genre:
<?
$sql = "SELECT table1.id, table1.author, table1.comment, table2.mail
FROM database INNER JOIN table1 ON table2.id = table1.id_auth";


euh, "database" c'est bien une table ?
-> Si non, ça marche pas (il faut que ce soit tes tables du SELECT)
-> Si oui, ça marche pas (derrière FROM, on met une/des tables)

SELECT table1.id, table1.author, table1.comment, table2.mail FROM
table1,table2 WHERE table1.id = table2.id

(adapte en fonction du nom de tes champs ; ça m'a pas l'air très clair
entre id et id_auth dans table1).

PS : cette requête ne renverra que les enregistrements de table1 pour
lesquels un enreg dans table2 a été trouvé.

$req = mysql_query($sql);
je cherche désèspéremment à savoir ce que je retrouve en effectuant un
$myobj = mysql_fetch_object($req); ?>


Bah oui ensuite c'est ça ; mais ça ne fonctionne que si le query a réussi
; toujours faire mysql_error() quand il y a un problème : ça donne une
piste.


--
Sébastien.
Webmaster www.coste-du-rhone.com
Grands vins des Cotes du Rhone
(blabla dangereux santé et tout ça)

Avatar
John Gallet
Bonsoir,

<?
Utilises les tags complets, ça t'évitera des surprises.


$sql = "SELECT table1.id, table1.author, table1.comment, table2.mail FROM
database INNER JOIN table1 ON table2.id = table1.id_auth";
$req = mysql_query($sql);
INNER ne sert à rien, c'est le défaut. Seules les jointures externes

(OUTER) doivent êter spécifiées.

je cherche désèspéremment à savoir ce que je retrouve en effectuant un <?
$myobj = mysql_fetch_object($req); ?>
Qu'est-ce que récupérer un objet peut bien t'apporter, on se le

demande... Si encore tu avais définit une classe et que tu faisais :
$myobj=(maclasse) mysql_fetch_object mais même pas.

Je n'arrive pas à récupérer les valeurs :(
print_r($myobj);

ou
vardump($myobj);
selon la version de php.

a++
JG

Avatar
cornelius
"CrazyCat" a écrit dans le message de
news:bm17ss$tvn$
Avec un script du genre:
<?
$sql = "SELECT table1.id, table1.author, table1.comment, table2.mail FROM
database INNER JOIN table1 ON table2.id = table1.id_auth";
$req = mysql_query($sql);
?>
je cherche désèspéremment à savoir ce que je retrouve en effectuant un <?
$myobj = mysql_fetch_object($req); ?>

Je n'arrive pas à récupérer les valeurs :(


Décompose d'abord ton ton problème:
problème de requête SQL ?
problème d'interptétration de mysql_fetch_obj ?

Essaie déjà avec une requête simple ou avec mysql_result ou fetch_array.

A prioris, $myobj->author suffirait. Tu n'a pas besoin de mettre le nom de
la table avant si les colonnes de tabl1 ne sont pas dans table2. Pour être
sûr mets des alias:

SELECT t1.id, t1.author, t1.comment, t2.mail FROM
table1 as t1 INNER JOIN table2 as t2 ON t2.id_auth = t1.id;

Ce serait plus juste déjà.
Cf: cours de SQL

Avatar
CrazyCat
CrazyCat wrote:
Avec un script du genre:
<?
$sql = "SELECT table1.id, table1.author, table1.comment, table2.mail
FROM database INNER JOIN table1 ON table2.id = table1.id_auth";
$req = mysql_query($sql);

je cherche désèspéremment à savoir ce que je retrouve en effectuant

un <? $myobj = mysql_fetch_object($req); ?>

A priori, je dois avoir quelque chose genre $myobj->table1.id,
$myobj->table1.author, $myobj->table1.comment, $myobj->table2.mail ?

Je n'arrive pas à récupérer les valeurs :(


Petite rectification: cette requete marche très bien, mon problème est en
fait (après beaucoup de recherches) lorsque des champs ont le même nom dans
deux tables différentes.
Donc:
$sql = "SELECT table1.id, table1.author, table1.comment, table2.id,
table2.mail FROM database INNER JOIN table1 ON table2.id = table1.id_auth";
$req = mysql_query($sql);
$myobj = mysql_fetch_object($req);

Que me donne $myobj->id ? et comment choisir le id de la table1 ou de la
table2?

--
CrazyCat from C-P-F.org


Avatar
john gallet
fait (après beaucoup de recherches) lorsque des champs ont le même nom dans
deux tables différentes.


Dans ce cas direction fr.comp.applications.sgbd : SELECT toto.tb1 AS
toto1, toto.tb2 AS toto2 ... C'est du SQL, pas du PHP. Noter néanmoins
que fetch_row résoudra le problème, même si la relecture du code sera
moins aisée.

a++
JG

Avatar
CrazyCat
john gallet wrote:
Dans ce cas direction fr.comp.applications.sgbd : SELECT toto.tb1 AS
toto1, toto.tb2 AS toto2 ... C'est du SQL, pas du PHP. Noter néanmoins
que fetch_row résoudra le problème, même si la relecture du code sera
moins aisée.


Merci, c'est excatement ce qui me manquait (le AS) mais je pensais que mon
soucis était au niveau du fetch_object().
Merci à tous :)

P.S.: si j'utilise un fetch_object plutot qu'un fetch_row, c'est qu'il y a
une petite raison, je ne dévoile pas tout mon code lorsque je demande un
renseignement, je n'extrait que la partie "suspecte" :)

--
CrazyCat from C-P-F.org

Avatar
Matchenul
P.S.: si j'utilise un fetch_object plutot qu'un fetch_row, c'est qu'il y a
une petite raison, je ne dévoile pas tout mon code lorsque je demande un
renseignement, je n'extrait que la partie "suspecte" :)

--
CrazyCat from C-P-F.org


Tu as raison, on est jamais assez prudent...il y a des gens compétents ici
qui pourraient te piquer tes idées !!
;-)
bonne continuation...

Avatar
CrazyCat
Matchenul wrote:
P.S.: si j'utilise un fetch_object plutot qu'un fetch_row, c'est
qu'il y a une petite raison, je ne dévoile pas tout mon code lorsque
je demande un renseignement, je n'extrait que la partie "suspecte" :)
Tu as raison, on est jamais assez prudent...il y a des gens

compétents ici qui pourraient te piquer tes idées !!
;-)
bonne continuation...


Mais non, c'est pas de la parano, mais juste que je ne vais pas envoyer 80
lignes de code alors que je connais parfaitement les 3 lignes qui posent
problème :)
Et pour info, je suis le premier à faire partager mes "découvertes" ou trucs
et astuces sur différents sites tels que asp-php.net :)
Bon, j'admet que "dévoiler" était pas le terme le meilleur, mais c'est de
l'humour :)
--
CrazyCat from C-P-F.org