|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : mars 2006 Messages : 9 ![]() |
Est-il possible (en mysql 4.1) de faire des requêtes conditionnelles pour éviter de faire des traitements conditionnels en php et plusieurs requêtes ?
Ce que je veux faire c'est quelque chose comme ça mais en un seul appel de mysql_query : - Si la table catégories contient un enregistrement avec le nom "canapés", renvoyer l'identifiant - Sinon : o insérer la catégorie "canapés", Ensuite : Insérer le modèle "toronto" dans la table produit en enregistrant l'identifiant de la catégorie insérée ou déjà existante dans un champ catID Cela est facile à faire avec du PHP, mais comme je vais appliquer ce traitement (et d'autres) sur une grosse table (données importées avec LOAD DATA INFILE) je me disais qu'il vaut mieux optimiser et se passer du maximum d'allers-retours php-mysql, si c'est possible... |
|
|
00
|
|
|
#2 |
|
Membre régulier
![]() Inscription : juillet 2004 Messages : 393 ![]() |
Sous Oracle il existe la fonction DECODE, peut être existe t elle sous MySQL ou un équivalent ?
|
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : mars 2006 Messages : 9 ![]() |
Sous MySQL DECODE est une fonction de décryptage...
|
|
|
00
|
|
|
#4 |
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
Sous MySQL ce genre de choses n'est pas possible en une seule requête.
Si tu souhaites préserver l'atomicité d'un bloc de commandes SQL, tu peux utiliser une transaction (InnoDB). Les procédures stockées de MySQL 5 permettent aussi d'exécuter une série de requêtes sans aller-retour entre le serveur et le client à chaque fois.
__________________
Pensez au bouton
|
|
|
00
|
|
|
#5 | |
|
Invité de passage
![]() Inscription : mars 2006 Messages : 9 ![]() |
Citation:
Je pensais à une autre possibilité : y a-t-il un moyen pour exécuter plusieurs commandes depuis un fichier ? Ca ne règlerait pas mon problème, mais cela permettrait au moins de limiter les échanges php-mySQL en groupant les requêtes à chaque fois que possible dans un fichier que je ferais ensuite exécuter d'un seul coup par MySQL... J'ai cherché sur la doc officielle mais je n'ai rien trouvé de tel, mais j'ai peut-être mal cherché ? (Dis oui dis oui dis oui |
|
|
|
00
|
|
|
#6 |
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
Oui mais il faut uploader le fichier sur le serveur d'une manière ou d'une autre. Ce n'est pas forcément élégant ni plus performant que faire plusieurs requêtes à la suite.
Ton réseau est si instable que ça ?
__________________
Pensez au bouton
|
|
|
00
|
|
|
#7 | ||
|
Invité de passage
![]() Inscription : mars 2006 Messages : 9 ![]() |
Citation:
Citation:
|
||
|
|
00
|
|
|
#8 | |
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
Citation:
__________________
Pensez au bouton
|
|
|
|
00
|
|
|
#9 | |
|
Invité de passage
![]() Inscription : mars 2006 Messages : 9 ![]() |
Citation:
Merci pour ton aide ! |
|
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Inscription : mars 2006 Messages : 9 ![]() |
En fait vu que le gros des requêtes va être des INSERT, je peux déja hyper optimiser en utilisant les valeurs multiples.
J'ai 5 tables à alimenter en parcourant cette table d'import. Si pour chaque ligne je fais un insert, ça va faire (5 x le nombre de lignes) INSERT... Par contre si je concatène les valeurs dans une seule chaine INSERT ça fera toujours que 5 requêtes INSERT au final : Code :
"INSERT INTO products VALUES (...),(...),(...),..."
|
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Inscription : mars 2006 Messages : 9 ![]() |
arrrrhhhhhhh !
Bon c'est pas aussi simple évidemment, parce que les différents insert sont reliés entre eux : l'insertion dans plusieurs tables dépend de l'insert_id d'insertions dans d'autres tables ... si j'insère toutes les tables d'un coup, bye bye le insert id... Bon tant pis, pas d'optimisation dans ce genre et on verra au final... si le client a le temps de s'endormir on fera une jolie animation d'attente |
|
|
00
|
|
|
#12 | |
|
Membre expérimenté
![]() Étudiant Inscription : mars 2006 Messages : 396 ![]() |
Citation:
Tu peut en plus utiliser le mot clé IGNORE pour éviter les doublons. Ce qui donnerait |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com