Requete plus rapide que celle la ?

Nouveau WRInaute
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.
 
WRInaute discret
Bonjour

Code:
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.
 
Nouveau WRInaute
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 ?
 
WRInaute discret
Toujours avec des index, tu doit utiliser un OUTER JOIN:

Code:
SELECT p.id
FROM produits p LEFT JOIN stock s ON p.ref=s.ref 
WHERE p.fournisseur=2 AND s.ref IS NULL
 
Nouveau WRInaute
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:
$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
 
Nouveau WRInaute
Comment écrire la requête dans ce cas ?
J'ai essayé çà, mais ça met cat et cat1 à vide.
Code:
$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);
}
 
WRInaute accro
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.
 
Nouveau WRInaute
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:
$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
 
Discussions similaires
Haut