Débutant, question sur syntaxe requete SQL

Débutant, question sur syntaxe requete SQL - SQL/NoSQL - Programmation

Marsh Posté le 06-12-2005 à 11:51:20    

Bonjour,
 
Utilisant une boutique OScommerce et PHPMyAdmin, j'utilise une petite requete pour pour lister l'ensemble de mes produits par nom, prix et ID sur un seul document (type EXCEL)
 
SELECT p.products_id, (p.products_price * 1.055), pd.products_name
FROM products p, products_description pd
WHERE p.products_id = pd.products_id
GROUP BY products_id
ORDER BY pd.products_name
 
Je souhaiterais exclure de cette liste exhaustive certaines catégories où sont classées ces produits.
Ces catégories ont bien entendu un identifiant numérique, ainsi qu'une dénomination.
 
Quelle serait l'expression SQL à rajouter pour parvenir à cela?
 
Par avance merci de votre aide.
 
SF

Reply

Marsh Posté le 06-12-2005 à 11:51:20   

Reply

Marsh Posté le 06-12-2005 à 12:37:52    

Dans la clause WHERE, rajouter quelque chose du genre :
AND p.id_categorie NOT IN (1, 22, 37, 72) [:proy]

Reply

Marsh Posté le 06-12-2005 à 13:04:38    

Bonjour et merci de la réponse
Pour l'instant je me retrouve avec une erreur de syntaxe 1064 ou sur l'incapacité de SQL à trouver la categories_id (qui appartient à la table categories).
 
Je vais continuer à chercher.
 
SF

Reply

Marsh Posté le 06-12-2005 à 13:35:42    

Tu dois avoir un champ, soit dans products p, soit dans products_description, qui y fait référence :??:

Reply

Marsh Posté le 06-12-2005 à 14:08:57    

Effectivement il y a une autre table appelée products_to_categories qui contient products_id et categories_id et fait le croisement, visiblement.
 
Je ne l'avais pas vu. je dois donc faire appel à trois table : products, products_description et products_to_categories.
 
Je veux bien encore un peu d'aide mrbebert si tu le peux...
 
Merci d'avance
 
SF

Reply

Marsh Posté le 06-12-2005 à 15:17:33    

Tu as déjà une jointure, avec les 2 tables et la condition qui permet de relier ces 2 tables. Là, c'est pareil, tu as juste à en ajouter une 3ème avec la condition qui va bien :)

Reply

Marsh Posté le 06-12-2005 à 15:30:38    

ça dépends si tu veux :
 
"ne pas afficher les produits qui appartiennent à certaines catégories"
ou
"afficher les produits qui appartiennent aux autres catérogies"
 
(ben ouais, en algèbre ensembliste, ce n'est pas équivalent)
 
Exemple :
 
Le produit A appartient aux catégories 1 et 2.
 
Toi, tu ne veux pas la catégorie 1, mais afficher TOUS les produits qui appartiennent à la catégorie 2 (même s'ils sont aussi dans la catégorie 1)
 
select distinct ...
from ...
where categorie_id not in (1)
 
 
Ou alors, tu ne veux pas afficher les produits qui sont dans la catégorie 1, même s'ils sont présents dans d'autres catégories :
 
select ...
from ...
where no exists (select null from product_to_categorie where product_to_categorie.product_id = product_id and product_to_category.category_id in (1))

Reply

Marsh Posté le 06-12-2005 à 15:49:35    

Merci bcp de votre aide.
Je ne suis pas confronté à cette problématique, heureusement.  
La remarque est cependant totalement judicieuse!
Mes produits sont suffisament sectorisés pour ne pas poser ces problèmes. Je sais qu'en excluant telle catégorie, je n'exclue pas de produits recherché.
 
Mon problème reste donc de formuler la 3e condition évoquée par mrbebert.
 
Mais je n'arrive pas à trouver la juste syntaxe sql.
 
Je suis vraiment désolé de vous embêter avec ces problèmes de débutant.
Mais il faut bien commencer un jour...
 
Merci encore
 
SF

Reply

Marsh Posté le 06-12-2005 à 16:16:04    

SirFr a écrit :

Bonjour,
 
Utilisant une boutique OScommerce et PHPMyAdmin, j'utilise une petite requete pour pour lister l'ensemble de mes produits par nom, prix et ID sur un seul document (type EXCEL)
 
SELECT p.products_id, (p.products_price * 1.055), pd.products_name
FROM products p, products_description pd
WHERE p.products_id = pd.products_id
GROUP BY products_id
ORDER BY pd.products_name
 
Je souhaiterais exclure de cette liste exhaustive certaines catégories où sont classées ces produits.
Ces catégories ont bien entendu un identifiant numérique, ainsi qu'une dénomination.
 
Quelle serait l'expression SQL à rajouter pour parvenir à cela?
 
Par avance merci de votre aide.
 
SF


 
Le group by ne sert à rien ici, tu n'utilises pas d'aggregat (sum, count, avg, max, min...)


---------------
MZP est de retour
Reply

Marsh Posté le 06-12-2005 à 16:19:01    

Bonjour
 
Pourtant sans ce groupe les produits ne bénéficient pas d'un classement prioritaire par dénomination...
Ceci dit ça je peux le faire après sous excel par exemple.
 
SF

Reply

Marsh Posté le 06-12-2005 à 16:19:01   

Reply

Marsh Posté le 06-12-2005 à 16:23:30    

order by suffit, tu peux trier par autant de colonnes que tu veux...

Reply

Marsh Posté le 06-12-2005 à 16:25:13    

Je prends bonne note de cela, merci beaucoup
 
SF

Reply

Sujets relatifs:

Leave a Replay

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