Mise à jour d'un champ en conservant la valeur existante

Pinocchio
Invité n'ayant pas de compte PHPfrance

31 mai 2006, 21:15

Désolé, je comprend plus là, tu me dis d'utiliser la méthode de guilt92, et après tu me dis non.

Oui, j'ai compris ce que faisait concat et convert.

Mais CONCAT ne me sert à rien, je suis obligé d'extraire avec un select avant.

Vous embêté pas pour moi, je sais je suis long à comprendre.

Je vais essayer quand même.

Mammouth du PHP | 19672 Messages

31 mai 2006, 21:33

Peut-être expliqué différemment, l'idée du CONCAT te paraîtra plus évidente: il s'agit en effet de court-circuiter la requête SELECT en faisant directement ta mise à jour : En supprimant une requête, tu gagnes en temps et en performance. Je t'accorde volontiers que sur une requête, le gain est insignifiant, mais multiplie ça à l'échelle de toute une application et tu réalisereas que finalement, cette option n'est pas totalement dénuée d'intérêt ;)

Donc en clair : au lieu d'un SELECT + une bidouille par programmation pour créer la nouvelle chaine + un UPDATE, tu fais uniquement un UPDATE, rien d'autre :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Pinocchio
Invité n'ayant pas de compte PHPfrance

31 mai 2006, 21:52

J'ai réussi :D
$sql = "UPDATE table SET note= CONCAT(note, '" . $_POST['note'] . "')
            WHERE id=" . $_POST['id'];
Je suis sur le cul, je cherchais un truc hyper complexe alors que c'était tout simple.

Merci à tous, et merci de votre patience à mon égard :P

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

31 mai 2006, 21:58

Je suis sur le cul, je cherchais un truc hyper complexe alors que c'était tout simple.
Ben ouais ;)

C'est ça que je voulais que tu trouves, reprendre le modèle CONVERT, mais avec CONCAT...
"Se baser sur" ne veut pas dire "copier/coller" :lol:

Pinocchio
Invité n'ayant pas de compte PHPfrance

01 juin 2006, 20:33

Bonsoir,

Je suis désolé de relancer le sujet, mais je viens de m'aperçcevoir que ça ne fonctionnait pas pour le 1er enregistrement, et pour cause, il est NULL par défaut, c'est précisé dans la doc, CONCAT(NULL, 'quelquechose') donne NULL, y'a t-il un moyen de contourner le problème ?

Merci.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

01 juin 2006, 21:30

Regarde ici : http://sunsite.mff.cuni.cz/MIRRORS/ftp. ... _NULL.html

Notamment le premier commentaire de la liste

Pinocchio
Invité n'ayant pas de compte PHPfrance

01 juin 2006, 21:58

Ca fonctionne :D

Ca me fait rajouter un caractère au début de mon champ, mais c'est pas grave, je l'enlèverais avec le php.

Merci !!

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

01 juin 2006, 22:01

Comme le disait ouckileou en début de topic, normalise tes données et crée une nouvelle table. Vraiment, c'est le meilleur conseil qu'on puisse te donner. Il n'existe virtuellement aucune situation où garder plusieurs informations dans un même champs est bénéfique, tu auras mieux fait d'utiliser une table séparée plus une seconde pour faire la liaison.

Et ne t'inquiète pas pour la "double jointure", ça prend 5 secondes de plus à écrire et 3 microsecondes à exécuter. Crois-moi, si tu t'obstines à conserver ce schéma tu risques de gros ennuis, ça n'en vaut pas la peine. (la preuve, tu commences déjà à avoir des problèmes à cause de NULL)

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

01 juin 2006, 22:03

Ca me fait rajouter un caractère au début de mon champ, mais c'est pas grave, je l'enlèverais avec le php.
Ah, le second problème est apparu pendant que j'écrivais mon précédent message ;)

Mauvaise nouvelle : ce ne sera pas le dernier... normalise !

Pinocchio
Invité n'ayant pas de compte PHPfrance

01 juin 2006, 22:10

Oui, je sais, mais ça me fait un peu peur les requêtes complexes, et comme vous avez pu le constater, je suis nul en ce domaine, et donc, il faut pas que je me trompe.

Mais je vais essayer de faire une nouvelle table, vous avez raison, je vais tenter ma chance.

Merci.

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

01 juin 2006, 22:48

T'inquiète pas, ce n'est pas plus dur que d'être obligé de jongler avec les CONCAT(), COALESCE() et LTRIM() qui sont nécessaire avec le format que tu utilises à l'heure actuelle. Et puis il est plus facile de trouver de l'aide pour un problème de jointure dont on est pas sûr que pour le traitement d'un champs dénormalisé.