IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Db PHP Discussion :

Mise à jour incrémentale avec Zend_db [ZF 1.7]


Sujet :

Zend_Db PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 5
    Par défaut Mise à jour incrémentale avec Zend_db
    Bonjour,

    J'ai un petit soucis.
    j'aimerais passer une requete qui est:

    UPDATE carte SET rank= rank+1 WHERE rank>54 ORDER BY rank DESC

    Mais le problème c'est que la partie "rank+1" ne passe pas dans la méthode update...

    Et que lorsque je tente un $_table->query($sql) j'ai un beau
    Fatal error: Call to undefined method Model_DbTable_Carte::query() in .......\Project\application\models\Carte.php on line 77
    $_table c'est ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    require_once(PATH_APP . '/models/DbTable/carte.php');
    $this->_table = new Model_DbTable_Carte;

    et Model_DbTable_Carte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
     
     class Model_DbTable_Carte extends Zend_Db_Table
    {
    // declaration obligatoire
        protected $_name = 'carte';
    	protected $_primary = 'id'; 
     
    }
    Quelqu'un a t'il une idée de comment que je dois faire ???
    Ou alors je dois me faire un fetchAll, et ensuite un foreach avec un update pour chaque ligne?
    Cette dernière solution ne me plait pas, mais bon...

    Merci d'avance pour les idées...

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Tu dois connaître avant la valeur de ton rank, alors soit tu le fais via un select, soit tu le fais avec une sous requête.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE carte 
       SET rank = ((SELECT MAX(rank) FROM carte)+1) 
    WHERE rank > 54

    ensuite tu as une méthode update dans ZF

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $t_table->update($sql);

    Ps: il est bien entendu , que comme tu mets un where rank>54, toutes les lignes ayant un rank supérieur a 54 seront modifié!

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 5
    Par défaut
    J'ai pas expliqué pourquoi je cherché à mettre en place cette requête...
    C'est par rapport à un classement. Quand un nouvel arrivant se place dans le classement, ce qui se trouve dans les place superieure doivent incrémenter leur "rank" qui est l'ordre de classement...

    Après des heures de recherche et de test, la meilleur solution reste celle ci:
    $rank = 10 // par exemple...

    $sql = $table->select()
    ->where('rank>=?', $rank)
    ->order('rank DESC');
    $allRanked = $table->fetchAll($sql, 'id')->toArray();

    foreach ( $allRanked as $ranked ) {
    $ranked ['rank_c']++;
    $table->update(ranked, $table->getAdapter()->quoteInto('id_c = ?', $ranked['id_c']));
    }
    Merci pour le commentaire.
    Mais voila le seul resultat potable que j'ai trouvé après pas mal de test.
    Si quelqu'un a une meilleur solution...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Détection d'une mise à jour faite avec VB
    Par vcattin dans le forum Access
    Réponses: 2
    Dernier message: 28/12/2006, 08h47
  2. [MySQL] Mise à jour mysql avec une checkbox non checké
    Par lodan dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/08/2006, 16h45
  3. mise à jours Acces avec données interbase
    Par milielf dans le forum InterBase
    Réponses: 6
    Dernier message: 19/06/2006, 14h49
  4. ajout et mise à jour conditionés avec T-SQL
    Par monsurf dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 05/05/2006, 15h59
  5. pb de mise à jour différée avec ACCESS, ADO et DELPHI 7
    Par QAYS dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/01/2006, 08h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo