Forum Clubic

Mysql questions sur requete

bonjour,

j’aurais une petite question sur la bonne façon de faire sur une requête:

la voici comme actuellement:
SELECT distinct(designation) FROM cmd_fourniss WHERE designation=’$designation’ AND date>’$date1an’ AND date<’$date’

Mon problème c’est que je voudrais comme récupération des données l’inverse de cette requête…
En clair je voudrais récupérer les éléments qu’on ne RETROUVE PAS entre date1an et date…or pour l’instant c’est l’inverse que je recupère.

Comment puis je faire la requête inverse?

merci d’avance

Essaye ça:

SELECT distinct(designation)
FROM cmd_fourniss
WHERE designation=’$designation’ AND (date <= ‘$date1an’ OR date >= ‘$date’)

L’inverse d’une condition, en général, c’est ça :

NOT (condition)

Et tu as les règles classiques:

NOT (a AND b) => !a OR !b
NOT (a OR b) => !a AND !b

Pour les opérateurs, ça dépend ce que tu fais.

... WHERE designation<>'$designation' AND date<='$date1an' AND date=>'$date'

PS : Je ne sais pas si tu code en PHP et si tu ne le fais pas déjà dans ton code, mais utilise la fonction PHP mysql_real_escape_string() là où tu construit des requêtes SQL à l’aide de variables PHP.

oui je code en php et en fait je fait déjà avant la requete mysql_real_escape_string()

dans les 2 cas ca ne marche pas:
WHERE designation<>’$designation’ AND date<=’$date1an’ AND date=>’$date’ ou WHERE designation=’$designation’ AND NOT(date <= ‘$date1an’ OR date >= ‘$date’)

je precise que $date1an est la date d’il y a 1an, et $date est la date actuelle

Oulah :slight_smile:

Essaye ça :

WHERE NOT (designation=’$designation’ AND date>’$date1an’ AND date<’$date’)

Tout simplement…

Le SQL a les mêmes composantes logiques que n’importe quel autre langage.

Qu’est-ce qui cloche : erreur SQL ? Résultats inattendus ?

résultat inattendus en fait

il prenait des articles qu il avait aucune raison de prendre

Nénamoins je me suis debrouillé autrement…en faisant quelques choses qui est a mon avis lourd alors qu’une solution plus simple existe

Je suis parti du principe que si je trouvais l’article, je ne le voulais pas…

Donc si
$mysql_numrows !=0
echo ‘je ne prends pas l’article’;
else
echo ‘je prend l’article car il n’existe pas dans la période données’;

De plus pour le traitement de la période j’ai fait plutot un BETWEEN qui m’a finalement semblé plus logique

coté résultat: ca a l’air de pas trop mal fonctionner. Au premier coup d’oeil de ce qu il trouve et particulierement sur des articles que je savais ce que je devais trouver, ca a l’air d’etre cohérent

Si tu nous donnais le schéma de table, ce que tu veux, on verrait bien si on peut pas faire mieux :slight_smile: et uniquement en SQL, donc facilement réexploitable, maintenable, etc. Avec SQL tu peux presque tout faire*, même si souvent le SGBD (ici mySQL) limite les choses.

  • sauf le café.

id
id_cmd  (format int)
date  (format date)
nom_fourniss (format varchar)
ref_fourniss (format varchar)
Reference_telpilat (format varchar)
quantite (format int)
prix_achat (format decimal (11,3))
Montant (format decimal (11,3))
designation (format varchar)

donc avec date, la date a laquelle est passée la commande bien sur