clé primaire ne s'affiche pas

Eléphant du PHP | 120 Messages

11 déc. 2007, 18:05

Bonjour
J'utilisre une base MYSQL
j'ai 2 tables, une pour les produits et une pour les photos liée à la premiere par id_prod. je veux une requete qui m'affiche les produits qui ne contiennent pas de photos. lors de mes recherches sur les forums j'ai pu trouvé ce script qui fonctionne bien pour la liste

Code : Tout sélectionner

SELECT * FROM fvproduits pr LEFT JOIN fv_photo po USING (id_prod) WHERE id_photo IS NULL
Mon probleme est que j'ai besoin du champ id_prod pour ouvrir un formulaire filtré et que celui ci ne s'affiche pas dans les résultats.
Quelqu'un aurait une solution ?
J'espere avoir étais assez clair. Merci d'avance
Voici la structure de mes 2 tables

Code : Tout sélectionner

CREATE TABLE `fv_photo` ( `id_photo` bigint(20) NOT NULL auto_increment, `id_prod` bigint(20) NOT NULL default '0', `nom_photo` varchar(50) NOT NULL default '', PRIMARY KEY (`id_photo`) ); CREATE TABLE `fvproduits` ( `id_prod` bigint(20) NOT NULL auto_increment, `propar` varchar(15) NOT NULL default '', `ref_produit` varchar(10) NOT NULL default '', `date_enr` date NOT NULL default '0000-00-00', `type` varchar(15) NOT NULL default '', PRIMARY KEY (`id_prod`), );

Eléphanteau du PHP | 40 Messages

11 déc. 2007, 19:14

est ce que tu peut nous donner le code avec lequel tu essais de recupérer "l'id_prod".
en construction http://plus2site.fr

Eléphant du PHP | 120 Messages

11 déc. 2007, 19:18

Voici la requête du fichier réponse sur l'id_prod
<?
$colname_prod = "-1";
if (isset($_GET['id_prod'])) {
  $colname_prod = $_GET['id_prod'];
}
mysql_select_db($database_FVimmo, $FVimmo);
$query_prod = sprintf("SELECT * FROM fvproduits, fv_ville WHERE id_prod = %s  AND fvproduits.ville=fv_ville.id_ville", GetSQLValueString($colname_prod, "int"));
$prod = mysql_query($query_prod, $FVimmo) or die(mysql_error());
$row_prod = mysql_fetch_assoc($prod);
$totalRows_prod = mysql_num_rows($prod);
?>
Merci d'avance

Eléphanteau du PHP | 40 Messages

11 déc. 2007, 19:42

j'ai rien compris je croyai que tu voulais recuperé l' "id_prod" mais ici c'est toi qui le donne. donc id_prod = $colname_prod. ??? reformule ta question a mois que quelqu'un comprenne peut etre que c'est moi qui BUG !!!
en construction http://plus2site.fr

Eléphant du PHP | 120 Messages

11 déc. 2007, 19:50

En fait la requete de demande ne m'envoi pas l'id_prod, donc à la récupération (qui fonctionne) je n'ai pas de résultat
Je remet le code de la requete qui ne me renvoi pas l'id_prod lorsque je teste
<?
SELECT *
FROM fvproduits pr  LEFT JOIN fv_photo po USING (id_prod)
WHERE id_photo IS NULL
?>
Merci encore

Eléphanteau du PHP | 40 Messages

11 déc. 2007, 20:02

lol. envoi le code qui te fait la liste celui qui factionne bien! pasque ta requette te renvoie bien l'id_prod . j'ai donc dans l'idée que t'a pas trouver comment le recuperé.
en construction http://plus2site.fr

Eléphant du PHP | 120 Messages

11 déc. 2007, 20:17

Bon d’accord, je vais essayer de tout te donner dans l’ordre
Depuis une page liste j’affiche une liste de produits qui n’a pas de photo en lien
Voici le code d’affichage
<?php do { ?>
    
<a href="modif.php?ref_produit=<?php echo $row_liste2['ref_produit']; ?>"> <?php echo $row_liste2['ref_produit']; ?></a
    
  <?php } while ($row_liste2 = mysql_fetch_assoc($liste2)); ?> 
La requete qui m’affiche ce résultat est celui que j’ai donné précedement


Dans la page modif.php, voici la requete
<?
$colname_prod = "-1";
if (isset($_GET['id_prod'])) {
  $colname_prod = $_GET['id_prod'];
}
mysql_select_db($database_FVimmo, $FVimmo);
$query_prod = sprintf("SELECT * FROM fvproduits, fv_ville WHERE id_prod = %s  AND fvproduits.ville=fv_ville.id_ville", GetSQLValueString($colname_prod, "int"));
$prod = mysql_query($query_prod, $FVimmo) or die(mysql_error());
$row_prod = mysql_fetch_assoc($prod);
$totalRows_prod = mysql_num_rows($prod);
?>
Le probleme est que l’idprod n’est pas envoyé à cette page, donc la liste s’affiche bien, masi lorsque je clique sur le lien pour aller à la page modif.php, l’id_prod n’est pas envoyé avec

J'espere que j'aurai été plus clair. Merci

Eléphant du PHP | 377 Messages

11 déc. 2007, 23:26

Je dirais que les deux champs de même nom s'écrasent : tu prends le second.
Or, étant donné que le second est vide par définition, en fin de compte ton champ est vide
Essaye avec cette requête plutôt:

Code : Tout sélectionner

SELECT pr.id_pro, pr. ref_produit FROM fvproduits pr LEFT JOIN fv_photo po USING (id_prod) WHERE id_photo IS NULL
Petit scarabée deviendra grand

Eléphanteau du PHP | 40 Messages

11 déc. 2007, 23:38

lol on a continuer et on est arriver là pour ce soir:
voila ce que rend la requette var_dump($row):
array(35) { ["id_prod"]=> NULL ["propar"]=> string(14) "professionnels" ["ref_produit"]=> string(8) "test1433" 
["date_enr"]=> string(10) "2007-12-01" ["type"]=> string(6) "maison" ["action"]=> string(8) "location" ["sup_total"]=> string(1) "0" 
["sup_hab"]=> string(1) "0" ["emp_sol"]=> string(1) "0" ["prix_demande"]=> string(1) "0" ["prix_dhs"]=> string(1) "0" ["prix_euro"]=> string(1) "0" 
["nb_chambre"]=> string(1) "0" ["nb_salon"]=> string(1) "0" ["nb_sdb"]=> string(1) "0" ["baignoire"]=> string(3) "non" ["douche"]=> string(3) "non" 
["nb_cuisine"]=> string(1) "0" ["pisc_col"]=> string(3) "non" ["hammam"]=> string(3) "non" ["meuble"]=> string(3) "non" ["jacusi"]=> string(3) "non" 
["balcon"]=> string(3) "non" ["ville"]=> string(1) "2" ["zone"]=> NULL ["etage"]=> string(1) "0" ["ascenseur"]=> string(3) "non" 
["climatise"]=> string(3) "non" ["descrip_fr"]=> string(10) "petit test" ["descrip_en"]=> string(2) "te" ["garage"]=> string(3) "non" 
["date_dispo"]=> string(10) "0000-00-00" 
["vendu_loue"]=> string(3) "non" ["id_photo"]=> NULL ["nom_photo"]=> NULL }
sur dream waver le test la requette SQL rend:
-2 enregistrement avec rien dans le champ id_prod
j'ai testé avec une base a moi une requette de type SELECT * FROM table1 LEFT JOIN table2 USING (champ_commun) renvoi bien les données et aucun champs n'est ecrasé, au contraire champ_commun vient en tête de liste des champs.
id_prod= 'NULL' ça correspond pas à ça:

Code : Tout sélectionner

CREATE TABLE `fv_photo` ( `id_photo` bigint(20) NOT NULL auto_increment, `id_prod` bigint(20) NOT NULL default '0', `nom_photo` varchar(50) NOT NULL default '', PRIMARY KEY (`id_photo`) ); CREATE TABLE `fvproduits` ( `id_prod` bigint(20) NOT NULL auto_increment, `propar` varchar(15) NOT NULL default '', `ref_produit` varchar(10) NOT NULL default '', `date_enr` date NOT NULL default '0000-00-00', `type` varchar(15) NOT NULL default '', PRIMARY KEY (`id_prod`), );
je supose un probleme dans l'implementation de la base. et peu etre un fonction de convertion qui aurrait participer.
en construction http://plus2site.fr

Eléphant du PHP | 377 Messages

12 déc. 2007, 11:35

SELECT * FROM table1 LEFT JOIN table2 USING (champ_commun)
Que cette requête ne te renvoie pas de champ vide, je n'en doute pas une seule seconde
par contre

Code : Tout sélectionner

SELECT * FROM table1 LEFT JOIN table2 USING (champ_commun) WHERE table2.autre_champ IS NULL
te renverra, par définition, table1.champ_commun écrasé par table2.champ_commun qui lui même sera NULL étant donné que c'est ce qu'on lui demande...
En effet, demander à table2.autre_champ d'être NULL revient à dire que le tuple dans table2 n'existe pas
Petit scarabée deviendra grand

Eléphant du PHP | 120 Messages

12 déc. 2007, 11:50

Bonjour
Merci à tous pour vos conseils. La requete de Shrell a fonctionné et j'ai le résultat voulu
@ bientôt

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]