Modélisation Modèle postgres

Petit nouveau ! | 9 Messages

31 août 2016, 13:44

Bonjour,

Du coup comme vue dans le précédent post : topic276863.html J'ai de gros soucis de modélisation.
J'avais au début le modèle comme celui-ci :
Image

Et donc par manque de compétence en SQL j'ai retouché le modèle en changeant tous les champs comme ceci :
Image

Je pensais bien que le modèle serai faux mais c'était ma seule solution.

Ce que je voulais faire à la base c'était :

Code : Tout sélectionner

$name = ($_GET['list_other']); $req='select * from other_map.$name'; $reqs = $bdd->prepare($req); $reqs ->execute(); $re = $reqs->fetchAll(); } foreach($re as $res){ echo $res['????????']; }
Vue que ma requête sql porte sur des champs qui changent en fonction du résultat de la liste déroulante je ne savais et je ne sais toujours pas quoi mettre dans le "echo$res['???'];
C'est pour cela que j'ai changé les attributs des tables afin de pouvoir faire : echo $res['date']; echo $res['remarq'];
Je sais c'est vraiment par soucis de facilité mais j'ai bataillé une semaine dessus sans y arriver donc je me suis débrouillé comme j'ai pu... :/

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8755 Messages

31 août 2016, 16:05

j'ai déplacé le sujet dans la section la plus adéquat ;)

première chose, c'est finit le temps où les nom étaient limité à 8 caractères :).
Les noms de colonnes ne sont pas explicite, si tu dois te référencer à un dictionnaire pour comprendre ce qui a été fait c'est pas simple ;) par exemple la table trocons_xxxx (trop long non ? := ) )
- n'est pas uniforme : le geom et gid n'ont pas le préfixe.
- les noms sont incompréhensible tcebts_fic ou tcebts_zfi sont surement parlant pour toi en ce moment mais pense aux autres qui peuvent intervenir la dessus (en dehors de moi maintenant ;) )

ensuite le modèle n'est pas forcément si mauvais. Il est surement possible de factoriser cela, par exemple indices_pollutions et rejets c'est la même chose, une seule table avec un "type" pour les distinguer peu suffire

idem pour incision_lit et comblement_lit (c'est la même chose mais pas dans le même sens ? :) )

idem pour erosions_berges et expensions_crue (idem pour le commentaire ? ;) )
geom c'est quoi ? c'est dans toutes les tables. Dans un modèle chaque chose devrait être unique la du coup c'est étonnant ;)

après c'est limite pour réduire car tu as des données spécifique à chaque (origine, type, importances, niveau etc).

Pour ce qui est des champs dupliqué tu peux utiliser l'héritage (une entité qui contient date + remarque + geom) dont les autres hérites

Attention aux relations 0,1, j'ai tendance à toujours avoir une valeur par défaut plutôt que de devoir mettre un left/right join ;) (simple avis perso ça fonctionne très bien comme ça

pour le reste il faut un peu de temps pour que je regarde.
Il en faut peu pour être heureux ......

Petit nouveau ! | 9 Messages

31 août 2016, 16:37

Super, merci de ta réponse !
Pour les nom à 8 caractère c'est que les tables peuvent être utilisés par Qgis, et quand on créé la table avec Qgis il y a la possibilité de mettre seulement 8 caractère... :/
Concernant les noms des champs, un dictionnaire est rempli à coté au fur et à mesure. :)

"geom" c'est l'attribut qui va recevoir la géométrie. C'est une couche .shp importée avec postgis.

:)

Pas de soucis prend le temps qu'il te faut. Après si tu as juste une petite piste que je puisse chercher un peu plus précisément de mon coté aussi ça sera cool :D

Petit nouveau ! | 9 Messages

01 sept. 2016, 09:13

Du coup la solution "facile" qui m'a été données c'est :

Code : Tout sélectionner

switch ($_POST['list_other_map']) { case "1" : $sql = "select emb_id as id from embacles"; break; case "2" : $sql = "select truc_id as id from table_des_trucs"; break; } $reqs = $bdd->prepare($sql); $reqs ->execute(); $re = $reqs->fetchAll(); foreach($re as $res){ echo $res['id']; }
Le problème c'est que si j'insère une table dans postgres il faut que je retape du code et ça j'aimerai éviter. Ensuite le deuxième problème c'est que mes tables n'ont pas le même nombre de colonnes (je n'ai pas mis le modèle complet vue que c'est le même principe à chaque fois). :/



***Edit***

C'est ok c'est résolu, voici le code qui permet d'afficher tous les champs quelque soit le nombre et leur nom, et de supprimer le premier et le dernier à l'affiche (qui sont l'id et la géométrie).

Code : Tout sélectionner

<?php require_once("connect.php"); ?> <?php $names = $_GET['list_other']; $req = "select * from other_map.$names"; $reqs = $bdd->prepare($req); $reqs->execute(); $re = $reqs->fetchAll(PDO::FETCH_ASSOC); ?> <?php foreach ($re as $res) { $i=1; $nbColonne= count($res); foreach ($res as $nomColonne=>$valeur) { if ($i > 1 && $i < $nbColonne) { echo $valeur; } $i++; } ?> <button class="bouton">Centrer</button> <button class="bouton">Ajouter</button> <button class="bouton">Modifier</button> <button class="bouton">Supprimer</button> <br /> <?php } ?>