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

Requêtes MySQL Discussion :

supprimer des entrées d'une BDD par rapport à un pourcentage


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Points : 25
    Points
    25
    Par défaut supprimer des entrées d'une BDD par rapport à un pourcentage
    Bonjour,
    j'ai crée une BDD et je voudrai modifier le nombre d'entrée par rapport à un pourcentage, est-ce que je peux taper comme ceci cette opération :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    $query1 = "UPDATE table SET COUNT(*)*80%";

    je voudrai prendre 80% du nombre d'entrée de cette table. Les 20% restant, je souhaiterai les remplir avec une autre table en fait...
    ???

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 50
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par MrJack14 Voir le message
    Bonjour,
    $query1 = "UPDATE table SET COUNT(*)*80%";
    En tous cas c'est pas comme ça qu'il faut faire... Il faut passer par une clause LIMIT pour appliquer ton UPDATE à une partie des enregistrements.

    Avec MySQL c'est pas si simple, tu ne peux pas faire tout bêtement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET @limi=(SELECT ROUND(COUNT(*)*0.8) FROM p);
    UPDATE p set id=3 where id=1  LIMIT @limi;
    En effet, cela provoque une erreur de syntaxe (cela semble être un bug connu: http://forums.mysql.com/read.php?98,...8212#msg-28212).

    Donc il faut ruser un peu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set @n=0;
    set @lim=(SELECT ROUND(COUNT(*)*0.8) FROM t);
    UPDATE t set page='x' WHERE page<>'x' AND (@n:=@n+1) BETWEEN 0 AND @lim;
    En plus les performances peuvent être désastreuses, si je comprends bien ce qui se passe: si tu veux faire un UPDATE de 1 enregistrement sur 1'000'000 et que ta base a 1'000'000 d'enregistrements, et ben le premier enregistrement trouvé est mis à jour mais il va quand même faire défiler les 999'999 qui restent. Non ?

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par MrJack14 Voir le message
    je voudrai prendre 80% du nombre d'entrée de cette table. Les 20% restant, je souhaiterai les remplir avec une autre table en fait...
    ???
    Je me demande bien ce qui te pousse à vouloir faire ça !
    Surtout que ces 80% sont pris aléatoirement et ne correspondent pas à une spécificité d'une partie de tes données.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Points : 25
    Points
    25
    Par défaut
    Merci mrcmrc mais je ne comprend pas très bien cette ligne là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE t SET page='x' WHERE page<>'x' AND (@n:=@n+1) BETWEEN 0 AND @lim;
    Je ne comprend pas la variable page.

    Sinon j'ai peut être trouver plus simple mais j'ai peut être tort:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $nb_articles="SELECT COUNT(DISTINCT id) FROM articles";
    $req_nb_articles=mysql_query($nb_articles);
    $nb_articles=mysql_result($req_nb_articles,0);
     
    construction_table_articles="REPLACE INTO articles
    SELECT *
    		FROM article LIMIT 0,'$nb_articles'*0.8";
    Alors?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Points : 25
    Points
    25
    Par défaut
    En fait ce pourcentage de réduction d'entrée proviendra d'une variable créer sous Flex à partir du pourcentage que l'utilisateur aura rentré sous l'interface graphique...

Discussions similaires

  1. Réponses: 0
    Dernier message: 19/11/2012, 11h57
  2. Réponses: 5
    Dernier message: 06/10/2011, 12h56
  3. Ajouter/Modifier/Supprimer des elements d'une bdd
    Par Ramdoulou dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 31/03/2008, 18h39
  4. Supprimer des entrées dans une table
    Par gpanpan dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 23/03/2008, 18h22
  5. [DOM] Ajouter/supprimer des entrées d'une liste déroulante
    Par Zakapatul dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/05/2007, 10h25

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