Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/03/2011, 23h25   #1
Futur Membre du Club
 
Homme Sébastien Deloy
Responsable d'un service sociale
Inscription : janvier 2011
Messages : 39
Détails du profil
Informations personnelles :
Nom : Homme Sébastien Deloy
Âge : 38
Localisation : Suisse

Informations professionnelles :
Activité : Responsable d'un service sociale
Secteur : Santé

Informations forums :
Inscription : janvier 2011
Messages : 39
Points : 18
Points : 18
Par défaut Une question pour les pros

Bonjour,
J'ai créer un service de comptabilité pour mon site et j'ai un petit soucie.

J'aimerais qu'en insérant une date dans un champs de recherche, les commandes du site, les commandes extérieures du site et les frais de l'année insérés figure sur la page de recherche.

J'ai réussi sans aucun problèmes, mais j'ai un petit soucie lors de l'addition final de tout ça ! voici mon sql :

Code :
1
2
3
4
SELECT ((commandes.total_ttc)+(commandes_ext.total_ttc))-(frais.total_ttc) AS benefice_total_ttc
FROM commandes, commandes_ext, frais
WHERE commandes.date AND commandes_ext.date AND frais.date 
LIKE %motcle%
la variable "motcle" fait appel à un champ de recherche :
motcle
Text
NULL
$_POST['date_compta']

Quelqu'un de fort sympathique pourrait il corriger ma sql ?
A mon avis c'est dans WHERE que sa cloche...
Merci d'avance...
smookyone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2011, 09h56   #2
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Bonjour,

Pensez à mettre votre code à l'aide des balises pour plus de lisibilité...

Pour votre syntaxe vous n'êtes pas loin, vous devez seulement repeter le predicat pour chaque colonne et ajouter les jointures entre les tables ainsi:

Code :
1
2
3
4
5
6
7
SELECT ((commandes.total_ttc)+(commandes_ext.total_ttc))-(frais.total_ttc) AS benefice_total_ttc
FROM commandes
            LEFT OUTER JOIN commandes_ext
               ON commandes.[date]=commandes_ext.[date]
            LEFT OUTER JOIN frais 
               ON frais.[date]=commandex.[date]
WHERE commandes.date LIKE %motcle% AND commandes_ext.date LIKE %motcle% AND frais.date LIKE %motcle%
Question pourquoi faites vous un LIKE? quel est le type de commandes_ext.date, frais.date etc.?

Les jointures (LEFT OUTER JOIN)partent du principe que vous n'avez qu'une ligne par date dans vos tables mais ce n'est surement pas le cas?
Vos tables ne sont'elles pas liées par un identifiant?

Quelle est votre version de SQL SERVER ?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/03/2011, 11h14   #3
Membre éprouvé
 
Homme Hamid MIRA
Ingénieur développement logiciels
Inscription : septembre 2003
Messages : 177
Détails du profil
Informations personnelles :
Nom : Homme Hamid MIRA
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2003
Messages : 177
Points : 413
Points : 413
Je suis entièrement d'accord avec les questions, remarques précédente et solution proposée par iberserk.
Cela m’étonnerais beaucoup, que, sur le plan fonctionnel, ces 3 tables (commandes, commandes_ext et frais) soient liées par le seul champs date (?)
Si ce n'est pas le cas, c.à.d, si ces 3 tables sont "indépendantes" alors la requête finale, effectuant le calcul du bénéfice, doit ressembler à ceci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT 
  ( 
	( SELECT SUM(commandes.total_ttc) 
	  FROM commandes
	  WHERE commandes.date LIKE %motcle% ) 	
	+ 	
	( SELECT SUM(commandes_ext.total_ttc) 
	  FROM commandes_ext
  	  WHERE commandes_ext.date LIKE %motcle% ) 
	- 
	( SELECT SUM(frais.total_ttc) 
	   FROM frais
	   WHERE frais.date LIKE %motcle% ) 
  ) AS benefice_total_ttc
A+
hmira est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/03/2011, 12h37   #4
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Passez par une table des DATE :
http://sqlpro.developpez.com/cours/gestiontemps/
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2011, 12h44   #5
Futur Membre du Club
 
Homme Sébastien Deloy
Responsable d'un service sociale
Inscription : janvier 2011
Messages : 39
Détails du profil
Informations personnelles :
Nom : Homme Sébastien Deloy
Âge : 38
Localisation : Suisse

Informations professionnelles :
Activité : Responsable d'un service sociale
Secteur : Santé

Informations forums :
Inscription : janvier 2011
Messages : 39
Points : 18
Points : 18
Bonjour,
Merci pour vos réponses, j'avais déjà essayé la solution de HMIRA, qui me semblait la plus logique mais cela ne fonctionne malheureusement pas.

Je vous explique en détail la façon dont cette page fonctionne :

Dans une page de comptabilité de mon site, j'y ai introduit un champ de recherche, de tel façon à ce que quand on y insère une date (2010, 2011, etc...) on y aperçoit toutes les commandes annuelles réalisées sur le site (table:commandes) et en dessous on y voit les commandes réalisées en dehors du site (table:commandes_ext) et encore en dessous les frais généraux (table:frais)

Un peu plus haut, j'y ai inséré dans un tableau les totaux, dont le bénéfice total du site, qui doit être justement commandes+commandes_ext-frais

Tout ça est facile à réaliser, mais justement le hic c'est que se total doit être filtré par ce champs de recherche qui me permet d'afficher les commandes, commandes ext et frais par leurs dates, dont la requête LIKE %motcle% et motcle qui fait appel au champs $_POST['nom de mon champs']

P.S. désolé pour les balises, c'est vrais que j'aurais pu les formatés comme il le faut, je suis débutant sur ce forum (la revoici avec le SUM que j'avais oublié..)

Code :
1
2
3
4
5
 
SELECT (SUM(commandes.total_ttc)+SUM(commandes_ext.total_ttc))-SUM(frais.total_ttc) AS benefice_total_ttc
FROM commandes, commandes_ext, frais
WHERE commandes.date AND commandes_ext.date AND frais.date 
LIKE %motcle%
smookyone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2011, 12h54   #6
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
on y insère une date (2010, 2011
C'est une année çà?
Peut-on saisir également les mois etc dans votre champsde recherche?
Peut'on voir votre modéle de base pour les trois tables concernées?

Citation:
Merci pour vos réponses, j'avais déjà essayé la solution de HMIRA, qui me semblait la plus logique mais cela ne fonctionne malheureusement pas.
Qu'est ce qui ne fonctionne pas? erreur? pas de résultat?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2011, 13h28   #7
Futur Membre du Club
 
Homme Sébastien Deloy
Responsable d'un service sociale
Inscription : janvier 2011
Messages : 39
Détails du profil
Informations personnelles :
Nom : Homme Sébastien Deloy
Âge : 38
Localisation : Suisse

Informations professionnelles :
Activité : Responsable d'un service sociale
Secteur : Santé

Informations forums :
Inscription : janvier 2011
Messages : 39
Points : 18
Points : 18
oui alors concernant l'année :
je peux faire une recherche dans le formulaire par année ex : 2011
par mois ex : 2011-05
et par jour ex : 2011-05-04

pour le mauvais fonctionnement, il n'y à pas d'erreur mais simplement une réponse vide.

et voici une des requête des 3 affichages qui fonctionne, mais c'est juste pour l'affichage et non le calcul des totaux qu'il me faut justement :

Code :
1
2
3
4
5
 
SELECT *
FROM frais
WHERE frais.date LIKE %motcle%
ORDER BY `date` ASC
smookyone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2011, 13h29   #8
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Vous ne répondez pas aux questions...

Essayez ceci:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
SELECT 
  ( 
    ISNULL(( SELECT SUM(commandes.total_ttc) 
      FROM commandes
      WHERE commandes.date LIKE '%'+motcle+'%' ),0)     
    +     
    ISNULL(( SELECT SUM(commandes_ext.total_ttc) 
      FROM commandes_ext
        WHERE commandes_ext.date LIKE '%'+motcle+'%' ),0) 
    - 
    ISNULL(( SELECT SUM(frais.total_ttc) 
       FROM frais
       WHERE frais.date LIKE '%'+motcle+'%' ) ,0)
  ) AS benefice_total_ttc
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2011, 13h47   #9
Futur Membre du Club
 
Homme Sébastien Deloy
Responsable d'un service sociale
Inscription : janvier 2011
Messages : 39
Détails du profil
Informations personnelles :
Nom : Homme Sébastien Deloy
Âge : 38
Localisation : Suisse

Informations professionnelles :
Activité : Responsable d'un service sociale
Secteur : Santé

Informations forums :
Inscription : janvier 2011
Messages : 39
Points : 18
Points : 18
Citation:
Vous ne répondez pas aux questions...
Désolé mais je ne comprenais pas bien votre question...

J'ai essayé votre requête mais dreamweaver me marque une erreur de syntaxe lors du test de la requête...

la voici :


Citation:
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 '+'2011'+'%' ),0) + ISNULL(( SELECT SUM(commandes_ext.total_ttc) FROM c' at line 1
smookyone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2011, 13h49   #10
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
c'est au niveai du like surement... je pars du principe que 'motcle' est une variable or je pense que vous créez dynamiquement votre requête en PHP ce qui est une erreur car vous vous rendez vulnérables aux attaques par injection SQL...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
SELECT 
  ( 
    ISNULL(( SELECT SUM(commandes.total_ttc) 
      FROM commandes
      WHERE commandes.date LIKE '%motcle%' ),0)     
    +     
    ISNULL(( SELECT SUM(commandes_ext.total_ttc) 
      FROM commandes_ext
        WHERE commandes_ext.date LIKE '%motcle%' ),0) 
    - 
    ISNULL(( SELECT SUM(frais.total_ttc) 
       FROM frais
       WHERE frais.date LIKE '%motcle%' ) ,0)
  ) AS benefice_total_ttc
Mais vous devriez passer par une procedure stockée prenant en paramètre votre critère de recherche et vous retournant le résultat...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2011, 14h00   #11
Futur Membre du Club
 
Homme Sébastien Deloy
Responsable d'un service sociale
Inscription : janvier 2011
Messages : 39
Détails du profil
Informations personnelles :
Nom : Homme Sébastien Deloy
Âge : 38
Localisation : Suisse

Informations professionnelles :
Activité : Responsable d'un service sociale
Secteur : Santé

Informations forums :
Inscription : janvier 2011
Messages : 39
Points : 18
Points : 18
oui exactement c'est une variable que je gère dynamiquement.

C'est un tout petit projet que je réalise localement dans ma petite région et je penses pas faire l'objet de hackers obstinés (0; enfin j'espère...
Je suis très débutant dans ce domaine, je n'ai fait aucune étude en php ou mysql, je fait ça à titre privé, et je dois dire que je me débrouille encore pas mal car mon site est pratiquement fini et il comporte tout un système de panier, de paiement et d'une plateforme admin qui contrôle tout avec un système de comptabilité. Mais je suis certain vu mon bas niveau que tout n'est pas optimisé car je n'ai fait que du bidouillage pour y arriver, le but est que ça fonctionne, pas grave si je me fait attaquer, c'est un petit site...

Citation:
Mais vous devriez passer par une procedure stockée prenant en paramètre votre critère de recherche et vous retournant le résultat...
Oui j'y ai pensé, du genre insérer le résultat de la recherche dans une nouvelle table et la traiter...

Ne vous inquiétez pas je vais bien finir par trouver une solution...

En tout cas merci de votre aide précieuse...
smookyone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2011, 16h17   #12
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
Ne vous inquiétez pas je vais bien finir par trouver une solution...
Ca ne fonctionne pas? ladernière requète que je vous ai écrite devrait fonctionner?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h14.


 
 
 
 
Partenaires

Hébergement Web