[RESOLU] aide pour une requête toute simple

aide pour une requête toute simple [RESOLU] - PHP - Programmation

Marsh Posté le 05-03-2008 à 11:14:45    

hello,
 
j'ai besoin de faire une requête pourtant toute simple, mais le résultat n'est pas bon
 
voici la requête MySQL :
 
SELECT `products`.`products_id`
FROM products, products_to_categories
WHERE (`products`.`products_id` != `products_to_categories`.`products_id`)
ORDER BY `products`.`products_id` ASC
 
je dois, à partir de 2 tables, qui ont un champ en commun, n'affichait que les products_id de la table products n'étant pas dans la table products_to_categories
le résultat doit être 1796 et il me sort 2333765 enregistrements, alors qu'il y en que 2670...
 
ou est mon problème ?
+


Message édité par cbastien41 le 05-03-2008 à 15:04:47
Reply

Marsh Posté le 05-03-2008 à 11:14:45   

Reply

Marsh Posté le 05-03-2008 à 11:18:58    

Tout d'abord ton problème c'est pas du php mais du sql.
 
Ensuite tu effectues un magnifique produit cartésien entre tes deux tables.
Je te conseille donc de lire ce topic sur les jointures: http://forum.hardware.fr/hfr/Progr [...] m#t1495691


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 05-03-2008 à 12:01:04    

désolé pour l'erreur
 
j'ai besoin de faire directement une requête dans MySQL 5.0.32
 
le produit cartésien de marche pas
j'ai essayé d'autres requêtes du type :
 
SELECT products_id  
FROM products WHERE products_id = ANY (SELECT products_id FROM products_to_categories);
 
mais j'ai toujours une erreur de type :
 
#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near '( SELECT products_id FROM products_to_categories )  
LIMIT 0, 3

Reply

Marsh Posté le 05-03-2008 à 13:19:09    

Code :
  1. SELECT products.products_id
  2. FROM products,products_to_categories
  3. WHERE products.products_id != products_to_categories.products_id)
  4. ORDER BY products.products_id ASC


 
et comme ca ?  :o


---------------
Feedback => https://forum.hardware.fr/hfr/Achat [...] 9708_1.htm
Reply

Marsh Posté le 05-03-2008 à 13:49:48    

[:prozac] on va arrêter le massacre là ...

 

Première solution avec une jointure externe:

Code :
  1. SELECT
  2. ...
  3. FROM
  4. products p
  5. LEFT OUTER JOIN products_to_categories pc ON p.products_id = pc.products_id
  6. WHERE
  7. pc.products_id IS NULL


la même avec un not exists ( c'est equivalent en terme de perfs):

Code :
  1. SELECT
  2. ...
  3. FROM
  4. products p
  5. WHERE
  6. NOT exits ( SELECT pc.products_id FROM products_to_categories pc WHERE pc.produtcs_id = p.products_id)
 

Mais je continue à dire que la lecture du post sur les jointures ne serait pas superflue.


Message édité par anapajari le 05-03-2008 à 13:50:19

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 05-03-2008 à 13:51:39    

la requête fonctionne mais il me donne 3232706 enregistrements alors que j'en ai que 2670 !
 
dans une table j'ai 2670 enreg, dans l'autre que 874
et je voudrais n'afficher que les 1796 enreg non présent dans les 2670 !

Reply

Marsh Posté le 05-03-2008 à 13:57:16    

merci Anapajari !
j'ai lu le post sur les différentes jointures et je les ai testé
 
pour ton premier exemple, voici l'erreur :
 
MySQL a répondu:  
 
#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near '( SELECT pc . products_id FROM products_to_categories pc WHERE  
 
et voici pour le deuxième :
 
MySQL a répondu:  
 
#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near '( SELECT pc . products_id FROM products_to_categories pc WHERE  
 

Reply

Marsh Posté le 05-03-2008 à 14:24:08    

c'est deux fois la même erreur :/ :/
t'es sur d'avoir réussi ton copier-coller? D'autant que y'a pas de sous-requête dans la 1ere méthode ...

 

et pis rien ne t'empêche d'essayer de comprendre ce que je fais.
Par exemple, voir que j'ai oublié un s a exiSts c'était pas insurmontable.


Message édité par anapajari le 05-03-2008 à 14:24:29

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 05-03-2008 à 14:33:00    

comme je te l'ai dit, j'ai regardé et testé le lien que tu m'as donné plus d'autres méthodes
 
voici l'erreur complète de ton seconde requête (avec le S)
 
Erreur
requête SQL:  
 
SELECT *  
FROM products p
WHERE NOT  
EXISTS (
 
 
SELECT pc.products_id
FROM products_to_categories pc
WHERE pc.produtcs_id = p.products_id
)
LIMIT 0 , 30  
 
MySQL a répondu:  
 
#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'exists ( SELECT pc . products_id FROM products_to_categories pc  

Reply

Marsh Posté le 05-03-2008 à 14:54:51    

pas possible la syntaxe est bonne(voir la doc )... t'es sur de la version de ton mysql?
Parce que la je pencherais plutot pour une version 3 qui supporte pas les sous-requêtes.

 

Si c'est le cas tu peux toujours utiliser la 1ere syntaxe, tout aussi efficace ( et qui fonctionne).


Message édité par anapajari le 05-03-2008 à 14:55:04

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 05-03-2008 à 14:54:51   

Reply

Marsh Posté le 05-03-2008 à 15:03:27    

je suis en mutu chez OVH
 
MySQL 4.0.25
version du client MySQL 5.0.32
 
je viens de réessayer ta première requête, et çà marche !!! bizarre tout de même, mais je crois que cela venait d'un manque d'espace avant le Where

Reply

Marsh Posté le 05-03-2008 à 15:03:58    

merci à toi !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed