[RESOLU] Récupérer le nom du département

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 : [RESOLU] Récupérer le nom du département

Re: Récupérer le nom du département

par cris84 » 13 janv. 2014, 22:58

:wink:

pardon effectivement....

Re: Récupérer le nom du département

par moogli » 13 janv. 2014, 22:24

tu as un gros bouton vert en haut a coté du titre : "marqué comme résolus"

@+

Re: Récupérer le nom du département

par cris84 » 13 janv. 2014, 21:54

Merci de vos réponses...
Le problème est donc résolut avec la requête JOIN

Merci de clôturer le sujet, je n'ai pas la commande pour ça.
$reponse = mysql_query('SELECT * FROM '.$prefix.'membres JOIN departement USING(id_departement) LIMIT '.$from.', '.$limit_par_page)or die(mysql_error());

Re: Récupérer le nom du département

par moogli » 12 janv. 2014, 20:46

sinon pour récupérer les données (si les tables n'ont pas le même nom) un
insert into table select les champs dans l'ordre de la table from l'ancienne table
c'est pratique est rapide ;)

@+

Re: Récupérer le nom du département

par sirakawa » 12 janv. 2014, 17:36

Bravo, moogli, pour ne pas t'en être tenu à la théorie; j'ajouterai deux autres raisons de faire ainsi: si un membre déménage ou si les régions sont révisées. Encore heureux que le code postal ne soit pas utilisé.

C'est un problème classique de conception des tables: un peu lourd au début, mais une fois que les requêtes sont au point, tout va tout seul.
Je dirais qu'il faut tenter la solution de moogli, quitte à resaisir les tables; mais les déparements ne sont pas si nombreux et les régions encore moins.

Re: Récupérer le nom du département

par moogli » 12 janv. 2014, 16:51

la clause using s'applique sur la clef étrangère et non sur un autre champs.

comme je te l'ai dit c'est la clef primaire qu'il te faut utiliser dans les autres tables et non un libellé.

exemple concret
CREATE TABLE REGIONS 
(
  ID_REGION int NOT NULL primary key,
  NOMREGION VARCHAR2(50 BYTE) NOT NULL
);
CREATE TABLE DEPARTEMENTS 
(
  ID_DEPARTEMENT int NOT NULL primary key
, ID_REGION NUMBER(*, 0) NOT NULL 
, DEPARTEMENT VARCHAR2(50) NOT NULL 
);

CREATE TABLE MEMBRES 
(
  ID_MEMBRE int NOT NULL primary key
, PSEUDO VARCHAR2(50 BYTE) NOT NULL 
, ID_DEPARTEMENT NUMBER(*, 0) NOT NULL 
);

ALTER TABLE DEPARTEMENTS
ADD CONSTRAINT FK_REGION FOREIGN KEY
(
  ID_REGION 
)
REFERENCES REGIONS
(
  ID_REGION 
);
ALTER TABLE MEMBRES
ADD CONSTRAINT FK_DEPARTEMENT FOREIGN KEY
(
  ID_DEPARTEMENT 
)
REFERENCES DEPARTEMENTS
(
  ID_DEPARTEMENT 
);
avec une telle structure la requete qui te donne ce que tu veux
select id_membre, pseudo, departement from membres
join departements using(id_departement)
avec tes table un simple select sur la table membres.

@+

Re: Récupérer le nom du département

par cris84 » 12 janv. 2014, 11:38

Bonjour à tous,

personne n'a une petite réponse ?

merci merci

Re: Récupérer le nom du département

par cris84 » 10 janv. 2014, 05:22

Bonjour,

j'ai trois tables
membres : id(), pseudo,....departement, region
departement : id_departement(), departement et id_region
region : id_region(), region
encore merci

Re: Récupérer le nom du département

par moogli » 10 janv. 2014, 00:16

le plus simple c'est que tu nous donnes les structures des deux tables histoire de pas avancer dans le flou.

Re: Récupérer le nom du département

par cris84 » 09 janv. 2014, 21:38

Merci merci pour cette article bien détaillé. Néanmoins malgré quelques essais, cela affiche uniquement les deux premières entrées avec la limit par page :

moi je voudrais juste afficher le nom du département par pseudo

voici ma requête sql :
$reponse = mysql_query('SELECT id, pseudo, avatar, sexe, biographie, configuration, departement, date_inscription FROM '.$prefix.'membres JOIN departement USING (departement) LIMIT '.$from.', '.$limit_par_page)or die(mysql_error());

Re: Récupérer le nom du département

par moogli » 09 janv. 2014, 10:55

salut,

ce que tu veux faire est à proscrire et va à l'encontre de la 1ère forme forme normale d'une base de donnée : atomicité d'une valeur
d'ailleurs a partir du moment où tu as le département tu n'as pas besoin besoin d'avoir la région vu que tu peux facilement la retrouver avec une requête (jointure par exemple, c'est d'ailleurs ce que tente ton 1ère select).

Par exemple imaginons que tu ais des "gens" qui habite dans un département et donc dans une région.
cela ce modélise simplement ainsi :
table régions
- idregion clef primaire
- nomregion varchar

table département
- iddepartement clef primaire
- nomdepartement varchar

table gens
- idgens clef primaire
- iddepartement clef étrangère de la table départment
- nomgens

pour avoir les noms de la région et du département :
select idgens, nomgens, nomdepartement, nomregion
from gens
join département using(iddepartement)
join région using(idregion)

tu veux les info que pour un gens ? => ajoute un where idgens = xxx

pourquoi faire cela (en dehors de te dire, c'est comme ça que l'on fait bien) ?
imagine que tu te soit trompé dan le nom d'une région (par exemple tu as mis ein au lien de ain).
tu va faire :
- un update du la table région
- une update sur la table gens (potentiellement des centaines de millions de ligne ?)

avec un système comme celui que je t'indique : 1 seule update le premier, c'est simple et rapide.
de plus tu gagne sur la taille de stockage des données (ce qui n'est pas forcément négligeable si tu as une base importante, même le prix du Go n'est plus forcément un obstacle ;) ).

@+

Re: Récupérer le nom du département

par cris84 » 09 janv. 2014, 08:34

Bonjour,

oui bien sûr qu'elles le sont, chaque liste affiche la région et le département. Dans le code il y a un peu d'AJAX pour afficher le département un fois la région choisie.
Pour être encore plus précis dans ma question, le code insert le numéro de chacun dans ma table (01 pour l'Ain, 02 pour l'Aisne etc...) et moi je voudrais insérer les noms des départements et régions et leurs numéro. Mes deux tables sont en VARCHAR (255).

Merci encore....

Re: Récupérer le nom du département

par damien_55 » 09 janv. 2014, 00:05

Slt,

Je ne comprends pas trop ta question, elle sont liées tes listes ?

Récupérer le nom du département

par cris84 » 08 janv. 2014, 18:18

Bonjour à tous,
j'ai deux liste déroulantes dans lesquelles je voudrais récupérer le nom du département de la région.
Si je mets $_POST['departement'] et $_POST['region'] j'obtient dans ma table le numéro de la région et celui du département alors que moi je voudrais le nom de chacun (Ain, Aisne....)
Merci de vos réponse.

Voici mon code :
<?php
$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;";
/* 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['region'];
            $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>


  <?php
if(isset($_POST['ok']) && isset($_POST['departement']) && $_POST['departement'] != "")
{
    $region_selectionnee = $_POST['region'];
    $dept_selectionne = $_POST['departement'];
?>
</p>


  <p>Vous avez sélectionné le département <?php echo($dept_selectionne); ?> dans la région <?php echo($region_selectionnee); ?></p>
<?php
}
?>
 
   <label for="departement">Votre région : <select name="region" id="region" onchange="changeDept(tab,this.value);">
      <option value="region">- - - 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> <span id="blocDepartements"></span><br /></label><br />

    <!-- ICI, le secret : on met un bloc avec un id ou va s'insérer le code de
         la seconde liste déroulande -->
  
  
  </fieldset>
?>