doublons dans listes de choix

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 : doublons dans listes de choix

par pjl » 02 août 2005, 23:17

Tu ne l'as pas perdu.
On l'a brulé le jour ou on a enterré Mme Irma.

par Cyrano » 02 août 2005, 09:44

Si un jour j'ai les moyens, je vais financer la ré-édition de "Plic et Ploc les joyeux nains" : on m'avait fait lire ça quand j'étais môme pour apprendre une règle que chacun devrait utiliser systématiquement :
Réfléchir avant d'agir

FAbrice, tu me reformules la chose avec certes plus d'élégance dans le verbe, mais tu n'ajoutes pas plus d'arguments à ton propos, ce qui fait que je suis toujours dans l'incapacité de t'apporter la moindre assistance.

Un problème s'accompagne des raison et/ou causes probables: donc tu me dis que ta requête ne te retourne pas le résultat espéré. Ok, moi, je veux bien, mais je ne vois pas la requête et pour détecter la présence d'une erreur, ça relève de la cartomancie, dommage, j'ai perdu mon jeu de cartes... :-k

par FAbrice » 02 août 2005, 09:37

vi, dsl :oops:

en fait, malgré le distinct devant le nom a "distincter", j'obtiens tjs des doublons dans ma liste déroulante. voila ce que voulais dire "ca ne marche pas" 8)

par Cyrano » 02 août 2005, 09:28

FAbrice, depuis le temps tu devrais le savoir : "Ça ne marche pas" n'est pas une question utile sur ce forum : si tu n'argumentes pas avec des précisions pertinentes, on ne peut pas t'aider, on fait pas dans la divination...

par FAbrice » 02 août 2005, 09:00

bonjour

et bien meme avec le nom du champ ca ne marche pas!

par Cyrano » 02 août 2005, 08:41

Tu n'as pas dû passer beaucoup de temps dans la doc : DINSTINCT s'utilise avec un champ en paramètre, jamais avec * : donc DISTINCT(nom_champ)

par FAbrice » 02 août 2005, 08:39

bonjour,

J'ai essayé d'utiliser la fonction DISTINCT mais ca ne filtre pas les doublons :(
voici comment je l'ai utilisée:
"SELECT DISTINCT * 
              FROM equipslug 
              WHERE equipment = '". $colname_RS2 ."
merci de votre aide,
FAb

par FAbrice » 01 août 2005, 17:07

copie corrigée:
<?php 
$colname_RS2 = "1"; 
if (isset($_GET['num'])) 
{ 
  $colname_RS2 = (get_magic_quotes_gpc()) ? $_GET['num'] : addslashes($_GET['num']); 
} 
mysql_select_db($database_TCS, $TCS); 

$query_RS2 = "SELECT *
              FROM equipslug
              WHERE equipment = '". $colname_RS2 ."'; 

$RS2 = mysql_query($query_RS2, $TCS) or die(mysql_error()); 
$row_RS2 = mysql_fetch_assoc($RS2); 
$totalRows_RS2 = mysql_num_rows($RS2); 
?> 
maintenant il n'y a plus que le trounevis. :wink:

Re: doublons dans listes de choix

par pjl » 01 août 2005, 17:05

Bonjour le forum,

j'ai une question pour vous.
j'ai une table de données qui se décompose de la maniere suivante:
N° equipement | slug | photo

a partir de cette table, j'ai la possibilité de faire évoluer ma liste de choix des slugs en fonction du n° choisi.

le PB est qu'il risque d'y avoir des doublons. ma question est la suivante:
comment faire pour eviter les doublons ;=) ?
PB de base de données, ca ?
Alors tu donnes la requete qui pose PB et pas la peine de donner le code PHP qui va avec.
C'est beaucoup plus clair et ca évite les embrouilles.

Pour ta réponse, regarde donc du coté des fonctions SQL comme DISTINCT et GROUP BY. Tu devrais trouver ta réponse.
Et on peut déplacer ce post dans base de données.
Il n'a rien à faire dans Débuter en PHP.

par Cyrano » 01 août 2005, 16:56

...des fois c pas facile a formuler ...
C'est précisément pour ça que tu ne trouves pas la réponse ;)

Autre chose, quand je vois ton code..... si tu apprenais à créer tes requêtes tout seul à la main au lieu d'essayer de corriger les requêtes méthode DreamWeaver, tu gagnerais pas mal de temps à terme.

Bon, ton code fait référence à un champ qui n'est pas dans la table montrée plus haut et à une table que tu ne montres pas non plus. C'est comme si tu me demandais comment réparer un carburateur en me montrant un tournevis et une fouchette : qu'est-ce que la fourchette fait dans le décor ??

Reprends ta copie et fais une question complète : les deux tables avec jeu d'essai (lignes exemples avec des données, même bidon on s'en tape) , ce que tu voudrais obtenir, par exemple telle ligne que tu précises, et ce que tu obtiens avec ta requête.

Et puis pour finir, voici comment simplifier et éclaircir un peu :
<?php
$colname_RS2 = "1";
if (isset($_GET['num']))
{
  $colname_RS2 = (get_magic_quotes_gpc()) ? $_GET['num'] : addslashes($_GET['num']);
}
mysql_select_db($database_TCS, $TCS);

$query_RS2 = "SELECT slug.type, equipslug.ID 
              FROM equipslug, slug 
              WHERE equipslug.equipment = '". $colname_RS2 ."' 
              AND equipslug.slug=slug.ID";

$RS2 = mysql_query($query_RS2, $TCS) or die(mysql_error());
$row_RS2 = mysql_fetch_assoc($RS2);
$totalRows_RS2 = mysql_num_rows($RS2);
?>
Note que je n'ai rien changé, juste modifié des noms de variable en remplaçant Recordset par RS partout, tout de suite on y voit plus clair et ensuite des retours de ligne pour la requête.

par FAbrice » 01 août 2005, 16:42

je suis touta fait d'accord avec toi sur la clareté des questions mais des fois c pas facile a formuler 8)

Ma requete sur la seconde liste est du genre:
afficher tous les slugs ayant pour n° d'equipment "num"
$colname_Recordset2 = "1";
if (isset($_GET['num'])) {
  $colname_Recordset2 = (get_magic_quotes_gpc()) ? $_GET['num'] : addslashes($_GET['num']);
}
mysql_select_db($database_TCS, $TCS);
$query_Recordset2 = sprintf("SELECT slug.type, equipslug.ID FROM equipslug, slug WHERE equipslug.equipment = '%s' AND equipslug.slug=slug.ID", $colname_Recordset2);
$Recordset2 = mysql_query($query_Recordset2, $TCS) or die(mysql_error());
$row_Recordset2 = mysql_fetch_assoc($Recordset2);
$totalRows_Recordset2 = mysql_num_rows($Recordset2);
voila :=)

par Cyrano » 01 août 2005, 16:21

:roll: L'art de bien formuler une question : c'est vrai que si tout le monde comprenait ça, ce forum n'aurais quasiment plus de raison d'être.

Bon, ok, là, je vois un exemple de données. Maintenant, formule ta question : tu voudrais obtenir quoi au juste : actuellement comment formules-tu ta requête SQL et qu'obtiens-tu ? Là, ce sera facile.... même pour toi de trouver la réponse.

Jusqu'à présent, il faudrait qu'on décortique ton code pour comprendre à peu près comment ça fonctionne... :-k

par FAbrice » 01 août 2005, 16:02

Code : Tout sélectionner

+--------------------------------------------------------+ | table equipslug | +------------+-------------------+-----------------------+ | champ_id | equipment | slug | Photo | +------------+-------------------+-----------------------+ | 1|valeur a 1 |valeur b 1 | a1 | | 2|valeur a 2 |valeur b 2 | b1 | | 3|valeur a 1 |valeur b 3 | a2 | | 4|valeur a 2 |valeur b 2 | b2 | | 5|valeur a 2 |valeur b 2 | b3 | | 6|valeur a 1 |valeur b 1 | a3 | +------------+-------------------+--------------+--------+
on voit donc bien qu'il y a 2 equimpents et entre 2 et 3 slug par equipement.

par ouckileou » 01 août 2005, 16:01

si g bien compris ce que tu me dis, ta fonction me permettra de ne pas insérer 2 fois le meme enregistrement. or dans mon cas, j'aurai le meme n° d'equipement, le meme slug mais une photo différentes.
oui, mais c'est un exemple
le principe reste le même : tu comptes le nombre d'enregistrement qui ont les mêmes propriétés que l'insertion que tu souhaites faire

si tu en trouves, c'est qu'il va y avoir un doublon

à toi d'adapter avec tes valeurs, tes tables

par Cyrano » 01 août 2005, 15:55

Quand je parle d'un jeu d'essai, je pense à quelque chose dans ce goût là :

Code : Tout sélectionner

+---------------------------------------------------+ | table xyz | +------------+-------------------+------------------+ | champ_id | champ_a | champ_b | +------------+-------------------+------------------+ | 1|valeur a 1 |valeur b 1 | | 2|valeur a 2 |valeur b 2 | | 3|valeur a 3 |valeur b 3 | | 4|valeur a 4 |valeur b 4 | | 5|valeur a 5 |valeur b 5 | | 6|valeur a 6 |valeur b 6 | +------------+-------------------+------------------+
À partir de là on peut beaucoup plus facilement visualiser ton problème pour autant que ce soit accompagné des exemples de ce que tu veux obtenir et de ce que tu obtiens d'erronné.