jumelage de champs

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 : jumelage de champs

par sorcier_clef » 14 juin 2006, 10:00

Bonjour,

Je vais sûrement reprendre le site du départs et garderais l'option de tri pour la fin. Malgrés tout, merci pour votre aide, j'essaierais ce code par curiosité tout de même !

Merci à tous :D

par Hubert Roksor » 13 juin 2006, 19:22

Je ne l'ai pas précisé dans mon précédent message, mais il est attendu que les utilisateurs fassent leurs propres recherches avant de poster un nouveau topic ou une nouvelle réponse. Si tu ne sais pas comment utiliser CASE (c'est normal quand on début, son utilisation n'est bizarrement pas très populaire) commence par lire sa description dans le manuel.

Dans ton cas, tu peux aussi t'intéresser à la fonction COALESCE(). Certains pourront te proposer d'utiliser d'autres fonctions telle que IFNULL() mais je les déconseille car elles n'existent pas forcément sur les autres serveurs de bases de données.

Donc pour en revenir à ta requête, "WHEN != NULL" ne veut rien dire pour MySQL. Si tu ne sais pas comment te servir d'une fonction, l'étape numéro 1 est vraiment d'aller voir le manuel (voir plus haut), sinon tu cours le risque de tomber par hasard sur une syntaxe qui a l'air de marcher mais qui en fait créera des bugs par la suite.

par sorcier_clef » 13 juin 2006, 18:19

Je pense avoir bien fait le changement mais rien ne s'affiche :
include("../connect.inc.php");

if ($_GET['classmt'] == "nom") {
$result=mysql_query("SELECT id, phone, email, CASE last_name WHEN != NULL THEN last_name END AS nom_utilisateur, zipcode, city, date_request, CASE company_name WHEN != NULL THEN company_name END AS nom_utilisateur, mail_env, type_mail, date_mail, doss_recu, doss_perdu, doss_relance, commentaires FROM abonne_n ORDER BY nom_utilisateur");

Re: jumelage de champs

par Vorkosigan » 13 juin 2006, 16:47

Ce n'est pas tout à fait vrai, le tri se fait sur une "valeur" à la fois, mais celle-ci peut représenter le résultat d'une fonction.
Oui, honte a moi... j'ai repondu un peu vite :oops:

par Hubert Roksor » 13 juin 2006, 16:30

je ne voudrais pas avoir à tous reprendre
À chaque fois que j'ai entendu ça la personne a fini par tout réécrire ou le projet a été abandonné. Mon conseil : calcule le temps qu'il te faut pour tout réécrire et compare-le au temps que tu vas passer à essayer de deviner ce que le programmeur avant toi a essayé de faire. Essaie de te faire une vue d'ensemble du projet avant de commencer à (ré)écrire quoi que ce soit, ça t'économisera beaucoup de temps par la suite.
comment récupéré mes autres infos
Exactement comme d'habitude. Considère tout ce qu'il y a entre "CASE" et "END" comme si c'était le nom du champs. Tu peux alors écrire:

Code : Tout sélectionner

SELECT tel, CASE un_champs WHEN 1 THEN 'un' ELSE 'autre' END AS nom_de_la_valeur, truc AS adresse, telephone FROM table
Maintenant, si tu poses la question parce qu'il y a un champs différent pour l'adresse selon que l'utilisateur est une société ou non alors tu viens de rentrer un second pied dans les sables mouvants parce qu'il te faudra un "CASE ... END" par champs que tu veux "jumeler". (c'est un autre indice qu'il faut repenser la structure de la table)

par sorcier_clef » 13 juin 2006, 16:06

Merci pour le coup de main.... ^^

Le problème c'est qu'il s'agit d'un site que je modifie et que je n'ai pas encore étudié dans son entier et je ne voudrais pas avoir à tous reprendre.

SELECT CASE nom
WHEN '' THEN raison_sociale
ELSE nom
END AS 'nom_util'
FROM abonne
ORDER BY 'nom_util'

comment récupéré mes autres infos (téléphone, Fax, adresse etc.....) ?

Désolé, j'suis vraiment débutant

Re: jumelage de champs

par Hubert Roksor » 13 juin 2006, 12:51

En SQL ce n'est pas possible directement, le tri se faisant uniquement sur une colonne a la fois
Ce n'est pas tout à fait vrai, le tri se fait sur une "valeur" à la fois, mais celle-ci peut représenter le résultat d'une fonction. Et puisque une image vaut mille mots :

Code : Tout sélectionner

SELECT CASE type_utilisateur WHEN 'societe' THEN raison_sociale WHEN 'particulier' THEN CONCAT(nom, ' ', prenom) ELSE 'Nom par défaut' END AS nom_utilisateur FROM utilisateurs ORDER BY nom_utilisateur
Cette requête utilisera la valeur "nom_utilisateur" (qui n'existe pas dans la base) pour le tri. Ceci dit, je n'aime pas trop l'idée d'avoir deux champs différents pour la même information, à savoir : le nom à afficher. Peut-être devrais-tu retirer de la tables les champs spécifiques au type d'utilisateur, t'assurer d'avoir un champs qui détermine le type d'utilisateur (dans mon exemple : "type_utilisateur", qui pourrait être un ENUM sous MySQL) et créer une table supplémentaire pour chacun des types d'utilisateurs pour stocker les données qui leurs sont propres.

Re: jumelage de champs

par sorcier_clef » 13 juin 2006, 11:05

Donc 2 possibilites :
- tu fais ce tri en PHP
- tu crees une table temporaire pour faire ton tri en SQL

Pour ma part, je privilegerais la solution PHP.
En fait, je suis larguer là :cry:

Si j'ai bien compris, je dois créer un 'array' que je classe avec des if supérieur etc.... c'est bien ca ?

Re: jumelage de champs

par Vorkosigan » 13 juin 2006, 10:43

mais comment puis-je faire pour classer ma colonne "case" ?
En SQL ce n'est pas possible directement, le tri se faisant uniquement sur une colonne a la fois.

Donc 2 possibilites :
- tu fais ce tri en PHP
- tu crees une table temporaire pour faire ton tri en SQL

Pour ma part, je privilegerais la solution PHP.

jumelage de champs

par sorcier_clef » 13 juin 2006, 10:33

Bonjour,

J'ai un p'tit soucis de fusion de colonne. Je m"explique :

Je voudrais, a l'entrée sur ma page php, que les colonne de mon tableau soit classées en fonction d'une variable placé en $_GET['variable'].

Jusque là, c'est facile :

SELECT nom, ville, date etc.... FROM ma_table ORDER BY $variable DESC

mon problème vient après :

Mes clients peuvent être des entreprises ou des particuliers et, dans le cas des entreprises, le champ "nom" n'est pas rempli et c'est le champ "raison sociale" qui l'est.

pour le remplissage du tableau, c'est simple :

if ($nom == "") {
$case = $raison_sociale;
} else {
$case = $nom;
}

mais comment puis-je faire pour classer ma colonne "case" ?

Merci de votre aide !! ^^