Requete plus rapide que celle la ?

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics

alex2323
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 21
Inscription: 7 Avr 2008

Requete plus rapide que celle la ?

Message le Mer Avr 09, 2008 15:56

Bonjour, je voulais savoir qu'elle est la requête la plus efficace ?
Y a t-il une meilleur solution ?

SELECT id
FROM produits
WHERE ref in (SELECT ref FROM stock)
AND fournisseur=2

SELECT p.id, s.prix
FROM produits p LEFT JOIN stock s ON (p.ref=s.ref)
WHERE p.fournisseur=2
AND p.ref=s.ref

Je vous remercie par avance.

French Fred
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 265
Inscription: 12 Fév 2004

Message le Mer Avr 09, 2008 16:16

Bonjour

Code: Tout sélectionner
SELECT p.id, s.prix
FROM produits p INNER JOIN stock s ON p.ref=s.ref
WHERE p.fournisseur=2


Cela serait plus correct et eventuellement plus performant dans la mesure ou vous avez ajoute des clefs sur certains champs.

alex2323
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 21
Inscription: 7 Avr 2008

Message le Mer Avr 09, 2008 16:30

ok merci

Et dans le cas où je voudrais faire ceci

SELECT id
FROM produits
WHERE ref not in (SELECT ref FROM stock)
AND fournisseur=2

comment je pourrais faire avec INNER JOIN ?


magicaxe
WRInaute discret
WRInaute discret
 
Messages: 151
Inscription: 18 Oct 2004

Message le Mer Avr 09, 2008 18:27

Toujours avec des index, tu doit utiliser un OUTER JOIN:

Code: Tout sélectionner
SELECT p.id
FROM produits p LEFT JOIN stock s ON p.ref=s.ref
WHERE p.fournisseur=2 AND s.ref IS NULL

alex2323
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 21
Inscription: 7 Avr 2008

Message le Mar Avr 22, 2008 17:00

Je réouvre ce sujet car j'ai un autre problème pour les requêtes.

J'ai une table avec 120000 enregistrements et je doit effectuer un update qui doit prendre la valeur d'un champ A et le séparé en 2 puis mettre une partie dans le champ A et l'autre dans le B.

La requête que j'ai faite est la suivante:
Code: Tout sélectionner
   
$four = 1;
$res = mysql_query("select id, cat from produit where four=".$four);
   while($a = mysql_fetch_array($res)){
      echo $a[1]." - ";
      $cat = substr($a[1], 0, 2);
      echo $cat." - ";
      $cat1 = substr($a[1], -2, 2);
      echo $cat1."<br/>";
      mysql_query("UPDATE produit SET cat='".$cat."', cat1='".$cat1."' where four=".$four);
   }

Mais c'est super long (j'ai l'impression que ça fini jamais)! Surtout pour 120 000 produits... J'ai pourtant mis id en clé primaire et four en index. Avez vous une solution ? Merci

petit-ourson
WRInaute impliqué
WRInaute impliqué
 
Messages: 855
Inscription: 31 Mai 2004

Message le Mar Avr 22, 2008 17:04

En faisant tout en SQL et un seul update sans passer par du PHP avec la fonction SUBSTRING.

alex2323
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 21
Inscription: 7 Avr 2008

Message le Mar Avr 22, 2008 17:43

Comment écrire la requête dans ce cas ?
J'ai essayé çà, mais ça met cat et cat1 à vide.
Code: Tout sélectionner
$res = mysql_query("select id, cat from produit where four=".$four);
   while($a = mysql_fetch_array($res)){
      mysql_query("UPDATE produit SET cat=SUBSTR(cat,0,2), cat1=SUBSTR(cat,2,2) where four=".$four);
}


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19598
Inscription: 8 Aoû 2004

Message le Mar Avr 22, 2008 17:55

normalement tu n'as pas besoin de la partie php. Par contre, le problème c'est que tu affecte une nouvelle valeur à cat en voulant toutefois utiliser l'ancienne pour cat1.

alex2323
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 21
Inscription: 7 Avr 2008

Message le Mar Avr 22, 2008 18:00

En faite je me suis trompé, c'est pas four="$four, c'est id=".$id
Donc je pense avoir besoin de la partie php.
Oui, c'est bien a cause du 'cat' que je n'arrive pas a le faire.
Y a t-il une astuce pour ça ?

Code: Tout sélectionner
$res = mysql_query("select id, cat from produit where four=".$four);
   while($a = mysql_fetch_array($res)){
      mysql_query("UPDATE produit SET cat=SUBSTR(cat,0,2), cat1=SUBSTR(cat,2,2) where id=".$a[0]);
}


C'est bien à cause du four qui m'étais du temps, là c'est moins long. (avec le php )
Le seul problème qui reste c'est, comment utiliser directement substr dans mon update ? Pour que je puissent retiré le php


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19598
Inscription: 8 Aoû 2004

Message le Mar Avr 22, 2008 18:08

juste ça
Code: Tout sélectionner
UPDATE produit SET cat=SUBSTR(cat,0,2), cat1=SUBSTR(cat,2,2)
ça ne va pas ?

alex2323
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 21
Inscription: 7 Avr 2008

Message le Mar Avr 22, 2008 18:11

Oui, les champs cat et cat1 deviennent tous vide.


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19598
Inscription: 8 Aoû 2004

Message le Mar Avr 22, 2008 19:09

fais le en 2 passes alors, d'abord le update pour le set cat1 puis ensuite pour le cat.Ca devrait le faire


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Formation recommandée sur ce thème :

Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par les experts Google Analytics de Ranking Metrics.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités