Problème de requète sur la meme table

Résolu
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 - 16 juin 2015 à 19:15
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 - 19 juin 2015 à 22:22
Bonjour,
j'ai voudrais adapter un code sur le net a ma situation . il se trouve que la requête utilise 2 tables region et departement or moi j'ai une seule table categorie_art avec les champs categorie et cout .

voici la requête prise sur net:
$sql = "SELECT id_departement AS idd, departement AS dept, region.id_region AS idr, region ".
"FROM departement, region ".
"WHERE departement.id_region = region.id_region ".
"ORDER BY region.id_region;";



moi j'ai tenté la meme chose avec ma table mais ca marche pas:
$sql = "SELECT id AS idd
               ,cout AS dept, categorie_art.id AS idr
               , categorie_art ".
               "FROM categorie_art, categorie_art.id = categorie_art.id ".
               "ORDER BY categorie_art.id;
			  ";

8 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
16 juin 2015 à 19:37
Il te manque le mot WHERE dans ta requête. .
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
16 juin 2015 à 19:38
Et vu que tu as tout dans une seule table... je ne comprends pas le besoin de vouloir faire une jointure. ..
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
16 juin 2015 à 19:58
N'oublies pas que tu peux "renommer " les tables dans ta requête :
SELECT A1.Champ1, A2.Champ2 FROM MaTable1 A1 INNER JOIN MaTable A2 ON a1.Id=A2.Id2
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
17 juin 2015 à 10:19
La requête que tu veux faire peut être écrite comme ceci tout simplement

$sql = "SELECT  C.id AS idd
              , C.cout AS dept
              , C.categorie_art.id AS idr
              , C.categorie_art 
          FROM categorie_art C
         ORDER BY C.id "; 


NB : En php ... tu n'as pas besoin de faire de concaténation (avec les . ) entre chaque ligne... tu peux tout écrire d'un bloc comme je l'ai fait !

0
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 1
17 juin 2015 à 12:26
voici ce que ça me met quand je teste en direct dans la base de données :


Erreur

Requête SQL : Documentation

SELECT C.id AS idd
, C.cout AS dept
, C.categorie_art.id AS idr
, C.categorie_art
FROM categorie_art C
ORDER BY C.id
LIMIT 0, 25

MySQL a répondu: Documentation
#1054 - Champ 'C.categorie_art.id' inconnu dans field list
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344 > msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023
17 juin 2015 à 18:06
C'est une erreur de copier coller de ton code
$sql = "SELECT  C.id AS idd
              , C.cout AS dept
              , C.id AS idr
          FROM categorie_art C
         ORDER BY C.id ";
0
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 1
17 juin 2015 à 12:36
Au fait il s'agit de 2 listes liées .
le code que j'ai pris sur le net marche tres bien mais le concepteur a utilisé 2 tables regions et departement moi je veux l'adapter en utilisant une seule tables categorie_art avec les 2 champs categorie et cout . donc quand l'utilisateur choisira une categorie dans la liste déroulante automatiquement son prix s'affiche dans l'autre liste.

voici le lien de son code complet en javascript
http://forum.phpfrance.com/faq-tutoriels/formulaires-listes-deroulantes-dynamiques-liees-t4562.html
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
17 juin 2015 à 18:10
Je répète... LUI .. il fait une JOINTURE .. car les données sont dispersées dans DEUX TABLES distinctes.
Toi.. tu as TOUT mis dans une SEULE .

En sachant cela ... tu as donc un COUT rattaché à UNE CATEGORIE ...
Aurais tu plusieurs fois la même catégorie présente dans ta table ????? (et donc rattachée à plusieurs couts ??? )

Pourquoi vouloir faire deux listes ??



Commence par :
1 - Nous montrer la structure de ta table
2 - Nous expliquer le lien entre la (les) catégorie(s) et le(les) cout(s)
3 - Nous montrer le code de tes deux listes (le code que tu utilises pour les créer (html/php...)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
18 juin 2015 à 15:26
Si tu n'as qu'un seul COUT par catégorie... pourquoi vouloir faire DEUX listes déroulantes ??

A la limite ... dans le VALUE de ta liste catégorie... tu y mets le COUT
Et via JAVASCRIPT ... sur le ONCHANGE de ta balise SELECT ... tu récupères le COUT de la catégorie choisie .... et tu la mets dans un INPUT ...
0
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 1
Modifié par jordane45 le 18/06/2015 à 15:39
l'idée est que la personne n'ai pas a saisir le cout sa la categorie qu'il aura choisi.

j'ai n'ai pas plusieurs fois la meme categorie presente dans ma table

1. structure de ma table

-- Structure de la table `categorie_art`
<span class='signature'>
CREATE TABLE IF NOT EXISTS `categorie_art` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`categorie` varchar(200) NOT NULL,
`cout` varchar(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

<span class='signature'>-- Contenu de la table `categorie_art`
<span class='signature'>
INSERT INTO `categorie_art` (`id`, `categorie`, `cout`) VALUES
(4, 'COSTUME 3 Pièces', '3000'),
(5, 'COSTUME 2 Pièces', '2500'),
(6, 'VESTE', '1500'),
(7, 'PANTALON', '1000');
COMMIT;

3. voici le code

<?php
/* On établit la connexion à MySQL avec mysql_pconnect() plutôt qu'avec mysql_connect()


*  car on aura besoin de la connexion un peu plus loin dans le script */$connexion = mysql_pconnect($serveur, $admin, $mdp);    
$choixbase = mysql_select_db($base, $connexion);   //DEBUT   
 $sql1 = "SELECT `id`, `categorie`".    " FROM `categorie_art`".    " ORDER BY `id`";    $rech_regions = mysql_query($sql1);    $code_region = array();    $region = array();    /* On active un compteur pour les régions */    $nb_regions = 0;    if($rech_regions != false)    {        while($ligne = mysql_fetch_assoc($rech_regions))        {            array_push($code_region, $ligne['id']);            array_push($region, $ligne['categorie']);            /* On incrémente de compteur */            $nb_regions++;        }    }    ?><fieldset style="border: 3px double #FFF; position: absolute; top: 181px; left: 181px; color: #000; text-align: left; width: 1000px; background-color:#FFD7FF"><legend>Selectionnez une Vtement</legend><select name="categorie" id="categorie" onchange="document.forms['chgdept'].submit();" style="background-color:#0FC9F0">  <option value="-1">- - - Choisissez un vetement - - -</option>    <?php    for($i = 0; $i < $nb_regions; $i++)    {?>  <option value="<?php echo($code_region[$i]); ?>"<?php echo((isset($idr) && $idr == $code_region[$i])?" selected=\"selected\"":null); ?>><?php echo($region[$i]); ?></option><?php    }    ?></select>    <?php    mysql_free_result($rech_regions);    /* On commence par vérifier si on a envoyé un numéro de région et le cas échéant s'il est différent de -1 */    if(isset($idr) && $idr != -1)    {        /* Cération de la requête pour avoir les départements de cette région */        $sql2 = "SELECT `id`, `cout`".        " FROM `categorie_art`".        " WHERE `id` = ". $idr ."".        " ORDER BY `id`;";        if($connexion != false)        {            $rech_dept = mysql_query($sql2, $connexion);            /* Un petit compteur pour les départements */            $nd = 0;            /* On crée deux tableaux pour les numéros et les noms des départements */            $code_dept = array();            $nom_dept = array();            /* On va mettre les numéros et noms des départements dans les deux tableaux */            while($ligne_dept = mysql_fetch_assoc($rech_dept))            {                array_push($code_dept, $ligne_dept['id']);                array_push($nom_dept, $ligne_dept['cout']);                $nd++;            }            /* Maintenant on peut construire la liste déroulante */            ?><select name="cout" id="cout" style="background-color:#0FC9F0">            <?php              for($d = 0; $d<$nd; $d++)            {                ?>  <option value="<?php echo($code_dept[$d]); ?>"<?php echo((isset($dept_selectionne) && $dept_selectionne == $code_dept[$d])?" selected=\"selected\"":null); ?>><?php echo($nom_dept[$d]." "); ?></option>                <?php            }?></select><?php        }        /* Un petit coup de balai */        mysql_free_result($rech_dept);    }?><br />
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
18 juin 2015 à 15:41
MSI... merci de préciser le LANGAGE dans les balises de code .....

et merci de vérifier que ton code est mis en forme ...là .... tout est sur une même lligne.............
c'est illisible.

Et enfin... as tu lu ma réponse précédente ?
0
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 1
18 juin 2015 à 17:08
J'ai lu ta réponse précédente mais il se trouve que j'arrive toujours pas a adapter.


l'idée est que la personne n'ai pas a saisir le cout sa la categorie qu'il aura choisi.

j'ai n'ai pas plusieurs fois la meme categorie presente dans ma table

1. structure de ma table

-- Structure de la table `categorie_art`
<span class='signature'>
CREATE TABLE IF NOT EXISTS `categorie_art` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`categorie` varchar(200) NOT NULL,
`cout` varchar(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

<span class='signature'>-- Contenu de la table `categorie_art`
<span class='signature'>
INSERT INTO `categorie_art` (`id`, `categorie`, `cout`) VALUES
(4, 'COSTUME 3 Pièces', '3000'),
(5, 'COSTUME 2 Pièces', '2500'),
(6, 'VESTE', '1500'),
(7, 'PANTALON', '1000');
COMMIT;

3. voici le code
<?php
/* Requête SQL de récupération des données */
$sql = "SELECT C.id AS idd
, C.cout AS dept
, C.categorie_art.id AS idr
, C.categorie_art
FROM categorie_art C
ORDER BY C.id ";
/* Connexion et exécution de la requête */
$connexion = mysql_pconnect($serveur, $admin, $mdp);
if($connexion != false)
{
$choixbase = mysql_select_db($base, $connexion);
$recherche = mysql_query($sql, $connexion);
/* Pour ne pas écraser mes tableaux, je crée un témoin */
$temoin_r = 0;
/* Création du tableau PHP des valeurs récupérées */
$regions = array();
/* Index du département par tableau régional */
$id = 0;
while($ligne = mysql_fetch_assoc($recherche))
{
$r = $ligne['idr'];
$d = $ligne['idd'];
/* Je vérifie si je suis toujours dans la même région, sinon je crée les tableaux nécessaires */
if($temoin_r != $r)
{
$regions[$r] = array();
/* J'ajoute laa région */
$regions[$r][0] = $ligne['categorie'];
$regions[$r][1] = array();
$regions[$r][2] = array();
$temoin_r = $r;
$id = 0;
}
/* J'ajoute les départements */
$regions[$r][1][$id] = $d;
$regions[$r][2][$id] = $ligne['dept'];
$id++;
}
/* On sérialise le tableau obtenu pour traitement par JavaScript */
$chaine = htmlspecialchars(serialize($regions), ENT_QUOTES);
?>
<script type="text/javascript">
/* <![CDATA[ */
<!--
/*
  • Ici, on transmets la chaîne sérialisée à JavaScript * pour la transformer en tableau indexé JavaScript */var tableau = new PhpArray2Js('<?php echo $chaine; ?>');var tab = tableau.retour();// -->/* ]]> */</script></head><body style="font-family: verdana, helvetica, sans-serif; font-size: 85%"><h3>Version Utilisant JavaScript</h3><p>Vous constaterez que le délai de latence entre la sélection et la mise à jour est quasiment inexistant.</p><?phpif(isset($_POST['ok']) && isset($_POST['cout']) && $_POST['cout'] != ""){ $region_selectionnee = $_POST['categorie']; $dept_selectionne = $_POST['cout'];?><p>Vous avez sélectionné le département <?php echo($dept_selectionne); ?> dans la région <?php echo($region_selectionnee); ?></p><?php}?><form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept"> <fieldset style="border: 3px double #333399"> <legend>Sélectionnez une région</legend> <select name="categorie" id="categorie" onchange="changeDept(tab,this.value);"> <option value="vide">- - - Choisissez une région - - -</option> <?php /* Construction de la première liste : on se sert du tableau PHP */ $nbr = count($regions); foreach($regions as $nr => $nom) { ?> <option value="<?php echo($nr); ?>"><?php echo($nom[0]); ?></option><?php } ?> </select> <!-- ICI, le secret : on met un bloc avec un id ou va s'insérer le code de la seconde liste déroulande --> <span id="blocDepartements"></span><br /> <input type="submit" name="ok" id="ok" value="Envoyer" /> </fieldset></form><?php }else{ /* Si vous arrivez ici, vous avez un gros problème avec la connexion au serveur de base de données */?><?php}?>
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
18 juin 2015 à 17:16

l'idée est que la personne n'ai pas a saisir le cout sa la categorie qu'il aura choisi.

j'ai n'ai pas plusieurs fois la meme categorie presente dans ma table

Dis ... tu vas nous le répéter combien de fois ????

... et ... ton javascript .. n'est toujours pas mis en forme... tout est à la suite .. sans aucun retour à la lignes !

De plus... là .. tu nous remets exactement le code que tu as trouvé sur le net .... hors.. ce n'est pas du tout ce que je t'ai proposé !
Tu fais ta LISTE ( donc.. une balises SELECT html...) avec les catégories.
Dans les option VALUE .. tu places les couts par exemple
Tu utilises un ONCHANGE pour lancer un script JS sur ta liste ..... script qui récupèrera la VALUE de la liste .. pour la mettre dans un INPUT à côté par exemple.
0
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 1
19 juin 2015 à 22:22
Bonsoir,
j'ai finalement opté pour l'exemple AJAX et tout fonctionne bien
0
Rejoignez-nous