Formation par Olivier Duffez

Formation au référencement par Olivier Duffez, créateur de WebRankInfo !
Une formule efficace alliant théorie et pratique, avec une haute disponibilité des intervenants
Cette formule a déjà convaincu plusieurs centaines d'entreprises, pourquoi pas vous ?
Réservez vite votre place en ligne (convention possible pour imputer sur le budget formation)

Formation référencement Marseille

[Résolu] Update / Select LEFT JOIN / et mysql

Aller à la page 1, 2  Suivante
Poster un nouveau sujet Imprimer cette discussion    Forum -> Développement d'un site Web   Les dernières discussions de ce forum sont disponibles au format RSS
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 
finstreet
WRInaute accro
WRInaute accro

Inscrit le: 10 Juil 2005
Messages: 9483

URL permanente de ce messagePosté le : Mer Mai 31, 2006 3:26    Sujet du message: [Résolu] Update / Select LEFT JOIN / et mysql

Bon j'ai une pb de requetes Smile

Alors ne rigolez pas quand vous allez la voir lol

Code:

$query = "SELECT ID, SUM(Valorisation) FROM laTable1 LEFT JOIN laTable2 ON Membre_laTable1 = Membre_laTable2 GROUP BY ID "
$mysql_result = mysql_query($query, $mysql_link);
while ($row = mysql_fetch_row($mysql_result))
{
   if (is_null($row[1]))
   {
      $row[1] = "0";
   }
   $query1 = "UPDATE laTable3 ";
   $query1 .= "SET Date = '$date_maj', Titres = '$row[1]', Total = Liquidites + Titres - Emprunt WHERE Membre = '$row[0]' ";
   $mysql_result1 = mysql_query($query1, $mysql_link);
   }


Et oui c'est le binz Smile Si vous aviez une idée pour simplifier ca

Smile


Dernière édition par finstreet le Mer Mai 31, 2006 14:34; édité 1 fois
 
finstreet Visiter le site web du posteur
FlorentP
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 25 Juin 2005
Messages: 145

URL permanente de ce messagePosté le : Mer Mai 31, 2006 5:17    Sujet du message: [Résolu] Update / Select LEFT JOIN / et mysql

Total = Liquidites + Titres - Emprunt
Alors qu'en même temps tu update Titres => dans total tu gardes l'ancienne valeure de Titres ou bien la nouvelle que tu met à jour ? (désolé de répondre à ta question par une question n'ayant rien a voir Very Happy )

Pour ton truc, quelque chose du genre, ça fonctionne ? (dans le sens est ce que mysql veut bien de ce genre de syntaxe déjà ? Very Happy)
UPDATE t3 SET Titres=(SELECT sum(valorisation) FROM t2 WHERE membre_t2=t3.Membre), Total=Liquidites + Titres - Emprunt, Date = '$date_maj'

(sous requete = mysql 4.1 mini sinon s'même pas la peine)
 
FlorentP Visiter le site web du posteur
spidetra
WRInaute accro
WRInaute accro

Inscrit le: 07 Juil 2003
Messages: 1499
Localisation: Toulouse

URL permanente de ce messagePosté le : Mer Mai 31, 2006 9:10    Sujet du message: [Résolu] Update / Select LEFT JOIN / et mysql

Deux petites règles perso :
1. Je ne met jamais une requête dans une boucle
2. Je préfére en premier une solution SQL à une solution PHP.

En appliquant ces deux règles à ton cas, une solution sans sous-requête.
1. Aggrégation
Code:

CREATE TEMPORARY TABLE tmp
SELECT ID, SUM(Valorisation)
FROM laTable1 LEFT JOIN laTable2
ON Membre_laTable1 = Membre_laTable2
GROUP BY ID


2. Mise à jour de la table t3 :
Code:

UPDATE latable3, tmp
SET mise a jour des champs qui vont bien
WHERE membre=tmp.id;


3. Suppression de la table temporaire
Code:

DROP TABLE tmp


Je n'ai pas testé la solution avec sous-requête de FlorentP.
Il manque la clause WHERE du update;
La commande Update n'est pas compatible avec la clause GROUP BY, cela simplifierait la requête.
La syntaxe proposé me chatouille un peu, ya un truc qui me gêne.
Je sais pas la solution avec sous-requête il faudrait la creuser et la tester.
La solution que je te présente est moins élégante qu'une sous-requête. C'est une solution plus classique.
 
FlorentP Visiter le site web du posteur
FlorentP
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 25 Juin 2005
Messages: 145

URL permanente de ce messagePosté le : Mer Mai 31, 2006 11:10    Sujet du message: [Résolu] Update / Select LEFT JOIN / et mysql

Je n'ai pas testé la solution avec sous-requête de FlorentP.
Il manque la clause WHERE du update;

=> Ca le fait pour toutes les lignes
Après, faut savoir si c'est intelligent de toucher à toutes les lignes ou non, faudrait savoir ce qu'il y a dans la db et connaitre l'usage qu'il en est fait...
 
FlorentP Visiter le site web du posteur
FlorentP
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 25 Juin 2005
Messages: 145

URL permanente de ce messagePosté le : Mer Mai 31, 2006 11:13    Sujet du message: [Résolu] Update / Select LEFT JOIN / et mysql

(puis faudrait uassi savoir sur une sous requete comme ça dans l'update ça marche ou pas Very Happy)
 
FlorentP Visiter le site web du posteur
spidetra
WRInaute accro
WRInaute accro

Inscrit le: 07 Juil 2003
Messages: 1499
Localisation: Toulouse

URL permanente de ce messagePosté le : Mer Mai 31, 2006 11:15    Sujet du message: [Résolu] Update / Select LEFT JOIN / et mysql

FlorentP a écrit:
Je n'ai pas testé la solution avec sous-requête de FlorentP.
Il manque la clause WHERE du update;

=> Ca le fait pour toutes les lignes
Après, faut savoir si c'est intelligent de toucher à toutes les lignes ou non, faudrait savoir ce qu'il y a dans la db et connaitre l'usage qu'il en est fait...


Ce n'était pas une critique FlorentP Wink
C'était juste pour dire que je proposais une autre solution, sans avoir tester la tienne.
Et tu as raison, sans connaître les structures des tables, et les besoins réels de mise à jour chaque solution est approximative.
 
FlorentP Visiter le site web du posteur
finstreet
WRInaute accro
WRInaute accro

Inscrit le: 10 Juil 2005
Messages: 9483

URL permanente de ce messagePosté le : Mer Mai 31, 2006 13:11    Sujet du message: [Résolu] Update / Select LEFT JOIN / et mysql

FlorentP a écrit:
Total = Liquidites + Titres - Emprunt
Alors qu'en même temps tu update Titres => dans total tu gardes l'ancienne valeure de Titres ou bien la nouvelle que tu met à jour ? (désolé de répondre à ta question par une question n'ayant rien a voir Very Happy )


C'est la nouvelle que j'ai mise à jour, et qui recalcule le tout Smile

FlorentP a écrit:
Pour ton truc, quelque chose du genre, ça fonctionne ? (dans le sens est ce que mysql veut bien de ce genre de syntaxe déjà ? Very Happy)


Lol oui... il met 7 secondes à gérer ca, mais il y arrive lol

FlorentP a écrit:
UPDATE t3 SET Titres=(SELECT sum(valorisation) FROM t2 WHERE membre_t2=t3.Membre), Total=Liquidites + Titres - Emprunt, Date = '$date_maj'


Arf...j'ai jamais testé un select dans un update
 
finstreet Visiter le site web du posteur
finstreet
WRInaute accro
WRInaute accro

Inscrit le: 10 Juil 2005
Messages: 9483

URL permanente de ce messagePosté le : Mer Mai 31, 2006 13:12    Sujet du message: [Résolu] Update / Select LEFT JOIN / et mysql

spidetra a écrit:
Deux petites règles perso :
1. Je ne met jamais une requête dans une boucle
2. Je préfére en premier une solution SQL à une solution PHP.


Je vais tester ca... mais sinon c'est vrai que c'est très moche une boucle PHP, et ca rame au possible surtout
 
finstreet Visiter le site web du posteur
finstreet
WRInaute accro
WRInaute accro

Inscrit le: 10 Juil 2005
Messages: 9483

URL permanente de ce messagePosté le : Mer Mai 31, 2006 13:13    Sujet du message: [Résolu] Update / Select LEFT JOIN / et mysql

FlorentP a écrit:
Je n'ai pas testé la solution avec sous-requête de FlorentP.
Il manque la clause WHERE du update;

=> Ca le fait pour toutes les lignes
Après, faut savoir si c'est intelligent de toucher à toutes les lignes ou non, faudrait savoir ce qu'il y a dans la db et connaitre l'usage qu'il en est fait...


en gros toutes les lignes sont modifiées oui... mais si le SUM(truc) me ressort une valeur NULL (possible avec le LEFT JOIN), il faut que je transforme le NULL en 0 sinon ca plantouille
 
finstreet Visiter le site web du posteur
finstreet
WRInaute accro
WRInaute accro

Inscrit le: 10 Juil 2005
Messages: 9483

URL permanente de ce messagePosté le : Mer Mai 31, 2006 13:15    Sujet du message: [Résolu] Update / Select LEFT JOIN / et mysql

spidetra a écrit:
Ce n'était pas une critique FlorentP Wink
C'était juste pour dire que je proposais une autre solution, sans avoir tester la tienne.
Et tu as raison, sans connaître les structures des tables, et les besoins réels de mise à jour chaque solution est approximative.


Oui j'ai pas tout détaillé Smile

Pour faire simple...

J'ai une table Cotation. Une table portefeuille. Et je dois recalculer le montant total des actions détenues par l'investisseur en récupérant le cours que je multiplie par les quantités. Et donc je recalcule le montant total
 
finstreet Visiter le site web du posteur
spidetra
WRInaute accro
WRInaute accro

Inscrit le: 07 Juil 2003
Messages: 1499
Localisation: Toulouse

URL permanente de ce messagePosté le : Mer Mai 31, 2006 13:27    Sujet du message: [Résolu] Update / Select LEFT JOIN / et mysql

finstreet a écrit:
FlorentP a écrit:
Je n'ai pas testé la solution avec sous-requête de FlorentP.
Il manque la clause WHERE du update;

=> Ca le fait pour toutes les lignes
Après, faut savoir si c'est intelligent de toucher à toutes les lignes ou non, faudrait savoir ce qu'il y a dans la db et connaitre l'usage qu'il en est fait...


en gros toutes les lignes sont modifiées oui... mais si le SUM(truc) me ressort une valeur NULL (possible avec le LEFT JOIN), il faut que je transforme le NULL en 0 sinon ca plantouille


Tu as la fonction COALESCE pour ça en SQL

Le SELECT devient :
Code:

CREATE TEMPORARY TABLE tmp
SELECT ID, SUM(coalesce(Valorisation, 0))
FROM laTable1 LEFT JOIN laTable2
ON Membre_laTable1 = Membre_laTable2
GROUP BY ID


Tu as testé en passant par la table temporaire ?
 
finstreet Visiter le site web du posteur
finstreet
WRInaute accro
WRInaute accro

Inscrit le: 10 Juil 2005
Messages: 9483

URL permanente de ce messagePosté le : Mer Mai 31, 2006 13:38    Sujet du message: [Résolu] Update / Select LEFT JOIN / et mysql

non j'ai pas testé encore...je me réveille Smile

par contre ce système d'update dans un select, je l'utilise 4 fois à la suite dans mon cron ... créer et détruire 4 tables de données, c pas risqué ?
 
finstreet Visiter le site web du posteur
spidetra
WRInaute accro
WRInaute accro

Inscrit le: 07 Juil 2003
Messages: 1499
Localisation: Toulouse

URL permanente de ce messagePosté le : Mer Mai 31, 2006 13:45    Sujet du message: [Résolu] Update / Select LEFT JOIN / et mysql

finstreet a écrit:
non j'ai pas testé encore...je me réveille Smile

par contre ce système d'update dans un select, je l'utilise 4 fois à la suite dans mon cron ... créer et détruire 4 tables de données, c pas risqué ?


les temporary table servent à ça. Je viens juste de relire le man, tu n'est pas obligé de faire le drop table. La table se supprimme automatiquement à la fin de la connection.
Je vois pas en quoi ça poserait un pb.
Tu re-optimize ta base régulièrement ?
Il est même possible de les créer uniquement en mémoire ( jamais testé )
http://dev.mysql.com/doc/refman/5.1/en/memory-storage-engine.html

Il est évident que si la solution en sous-requêtes est plus performante, il ne faut pas hésiter. C'est plus simple.
 
finstreet Visiter le site web du posteur
finstreet
WRInaute accro
WRInaute accro

Inscrit le: 10 Juil 2005
Messages: 9483

URL permanente de ce messagePosté le : Mer Mai 31, 2006 13:52    Sujet du message: [Résolu] Update / Select LEFT JOIN / et mysql

ma solution en sous requete est une usine à gaz... ca prend déjà 7 secondes alors que j'ai que 400 membres lol et vu que l'objectif c plutot les 10.000 membres lol

j'optimize les tables toutes les nuits, à la fin du cron Smile
 
finstreet Visiter le site web du posteur
finstreet
WRInaute accro
WRInaute accro

Inscrit le: 10 Juil 2005
Messages: 9483

URL permanente de ce messagePosté le : Mer Mai 31, 2006 14:17    Sujet du message: [Résolu] Update / Select LEFT JOIN / et mysql

Bon alors j'ai fais les premiers tests sur la création de table temporaire... et avec le nouveau système ca me donne 1 seconde au lieu de deux ... bref c'est déjà tout bénef

je n'ai pas testé l'autre solution encore
 
finstreet Visiter le site web du posteur
 
Montrer les messages depuis:   
Revenir en haut    Forum -> Développement d'un site Web Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 2 - Aller à la page 1, 2  Suivante
Connexion
Nom d'utilisateur:    Mot de passe:      Se connecter automatiquement à chaque visite    

A lire dans l'actualité sur WRI :

En savoir plus : .

CLIQUEZ ICI pour vous inscrire à WebRankInfo (forum, annuaire, outils...)

Connexion

© 2001-2005 phpBB Group, support français
Personnalisation : WebRankInfo ™


 ODP  Firefox  Alsacreations  annuaire webmaster Yagoort