Fusionner 20 requetes en une seule

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par sff, 17 Novembre 2016.

  1. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    Bonjour,

    je souhaite fuisionner ces 8 requetes, mais je ne trouve pas la solution. Est ce que quelqu'un peut m'aider ?

    Merci d'avance

    Code:
    $mysqli->query('UPDATE '.$language_settings.'_cities SET name="'.$city1.'" WHERE id=1 LIMIT 1');
    $mysqli->query('UPDATE '.$language_settings.'_cities SET name="'.$city2.'" WHERE id=2 LIMIT 1');
    $mysqli->query('UPDATE '.$language_settings.'_cities SET name="'.$city3.'" WHERE id=3 LIMIT 1');
    $mysqli->query('UPDATE '.$language_settings.'_cities SET name="'.$city4.'" WHERE id=4 LIMIT 1');
    $mysqli->query('UPDATE '.$language_settings.'_cities SET name="'.$city5.'" WHERE id=5 LIMIT 1');
    $mysqli->query('UPDATE '.$language_settings.'_cities SET name="'.$city6.'" WHERE id=6 LIMIT 1');
    $mysqli->query('UPDATE '.$language_settings.'_cities SET name="'.$city7.'" WHERE id=7 LIMIT 1');
    $mysqli->query('UPDATE '.$language_settings.'_cities SET name="'.$city8.'" WHERE id=8 LIMIT 1');
    
     
  2. indigene
    indigene WRInaute accro
    Inscrit:
    7 Septembre 2003
    Messages:
    3 657
    J'aime reçus:
    72
    Re: Reduire une requete sql

    il ne manquerait pas une clause where quelque part ?
     
  3. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    Je viens de modifier le post, j'ai fais une erreur.
     
  4. indigene
    indigene WRInaute accro
    Inscrit:
    7 Septembre 2003
    Messages:
    3 657
    J'aime reçus:
    72
    ok, donc oublie ma première réponse

    Dans ce nouveau cas tu devrais faire une boucle de 1 à n et coder la requête à l'intérieur de la boucle
     
  5. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    J'ai pensé à ca, mais ca me fera une exécution de 20 requêtes dans tous les cas. J'aurais aimé les fusionner pour utiliser le moins de ressources possible
     
  6. niap
    niap WRInaute discret
    Inscrit:
    17 Octobre 2009
    Messages:
    139
    J'aime reçus:
    0
    En admettant que id est une clé unique, tu peux utiliser INSERT avec ON DUPLICATE
    Code:
    $mysqli->query(
    'UPDATE '.$language_settings.'_cities (id, name) VALUES 
    (1, "'.$city1.'"),
    (2, "'.$city2.'"),
    (3, "'.$city3.'"),
    (4, "'.$city4.'")
    ON DUPLICATE KEY UPDATE 
    id=VALUES(id), 
    name=VALUES(name)
    );
     
  7. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    Merci pour ta réponse, j'ai mis plutot INSERT INTO, mais le soucis c'est que je me retrouve avec 20 lignes identiques.

    Il y a pas possibilité de reduire tout cela ?

    Code:
    $mysqli->query('INSERT INTO '.$language_settings.'_cities (id, name) VALUES 
    			(1, "'.$city_1.'"),
    			(2, "'.$city_2.'"),
    			(3, "'.$city_3.'"),
    			(4, "'.$city_4.'"),
    			(5, "'.$city_5.'"),
    			(6, "'.$city_6.'"),
    			(7, "'.$city_7.'"),
    			(8, "'.$city_8.'"),
    			(9, "'.$city_9.'"),
    			(10, "'.$city_10.'"),
    			(11, "'.$city_11.'"),
    			(12, "'.$city_12.'"),
    			(13, "'.$city_13.'"),
    			(14, "'.$city_14.'"),
    			(15, "'.$city_15.'"),
    			(16, "'.$city_16.'"),
    			(17, "'.$city_17.'"),
    			(18, "'.$city_18.'"),
    			(19, "'.$city_19.'"),
    			(20, "'.$city_20.'")
    			ON DUPLICATE KEY UPDATE id=VALUES(id), name=VALUES(name)');
    Merci
     
  8. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 760
    J'aime reçus:
    234
    Pourquoi t'as besoin de passer "id" lors d'un insert ? Parce que c'est étonnant que ce soit pas un autoincrement.
     
  9. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    Le problème c'est qu'avec un query('UPDATE ca ne fonctionne pas mais en INSERT INTO oui
     
  10. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    Tu voulais dire UPDATE name=VALUES(name)'); au lieu de UPDATE id=VALUES(id), name=VALUES(name)'); ?

    C'est vrai que dans ce cas id n'était pas necessaire
     
  11. niap
    niap WRInaute discret
    Inscrit:
    17 Octobre 2009
    Messages:
    139
    J'aime reçus:
    0
    Oui, désolé, c'est INSERT INTO évidemment.
    Par contre je peux pas corriger mon post pour rectifier l'erreur, c'est normal ?
    Je trouve pas ça terrible, si quelqu'un tombe sur le post sans lire la suite, le code n'est pas bon.

    Réduire l'écriture de la requête ?
    Tu peux faire un truc comme ça :
    Code:
    $req = array();
    for($i = 1; $i <= 20; $i++){
        $req[] = '('.$i.', "'.$GLOBALS['city_'.$i].'")';
    }
    $mysqli->query('INSERT INTO '.$language_settings.'_cities (id, name) VALUES '.implode(',', $req).' ON DUPLICATE KEY UPDATE name=VALUES(name)');
    
     
  12. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    Merci pour ton aide. Ca fonctionne parfaitement. En fait cétait relativement simple.

    J'ai une question à te poser. Habituellement, j'utilise ce genre de variable pour les boucles : ${"city_$i"} au lieu de $GLOBALS['city_'.$i]. Y a t'il une réelle différence ?

    Merci
     
  13. niap
    niap WRInaute discret
    Inscrit:
    17 Octobre 2009
    Messages:
    139
    J'aime reçus:
    0
    Je ne connaissais pas la notation ${} :lol:
    C'est une ancienne notation d'après ce que je trouve sur php.net, non ?
     
  14. madri2
    madri2 WRInaute impliqué
    Inscrit:
    29 Décembre 2007
    Messages:
    655
    J'aime reçus:
    0
    ${'truc'} est l'équivalent de $truc
    donc tu peux avoir une variable au nom dynamique
     
Chargement...
Similar Threads - Fusionner requetes seule Forum Date
Fusionner 2 requetes sql Développement d'un site Web ou d'une appli mobile 3 Février 2010
Fusionner deux champs sur la même table et même base de donnée Mysql Administration d'un site Web 12 Septembre 2018
Fusionner plusieurs sites pays sur le.com Référencement international (langues, pays) 2 Août 2017
Fusionner 2 sites et redirections 301 Netlinking, backlinks, liens et redirections 4 Mai 2017
Est-il possible de fusionner 2 comptes adsense? AdSense 14 Novembre 2016
Fusionner ou lier, délier ma Page Facebook à mon Profil ? Facebook 9 Mars 2016
Fusionner deux sites ecommerce, est-ce pertinent ? e-commerce 1 Février 2016
Fusionner plusieurs page Google+ Google+ 21 Août 2014
Fusionner des CSS -> problème ? Développement d'un site Web ou d'une appli mobile 22 Juillet 2014
Fusionner 2 pages Google+ Google+ 12 Juin 2014
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice