espadon2
Messages postés71Date d'inscriptionjeudi 19 juin 2003StatutMembreDernière intervention21 octobre 2008
-
16 janv. 2006 à 15:06
espadon2
Messages postés71Date d'inscriptionjeudi 19 juin 2003StatutMembreDernière intervention21 octobre 2008
-
18 janv. 2006 à 09:39
Bonjour a tous,
Voila j' ai un petit probleme d'excution d'une requete sun un serveur SQL 2000 (WINDOWS 2000 server) dans un de mes scripts PHP :
Warning: MS SQL: Query failed in d:\dvlp\va\includes\function.php on line 816 Le contexte de la base de donnes a t chang en 'stat'.
j'ai une table VENTES (de produits) , et je crée une requete en fonction de certaines selection de l' utilisateur.
En resumé , l'utilsateur selectionne ou pas , une année , un mois, un fournisseur , un de ses magasins ...etc
et je dois lui renvoyer la quantité , le chiffre affaire, la marge etc ... pour chaque produit correspondant aux critéres de selection
Ma requete marche dans l' analyseur de requete de MS SQL 2000, mais pas avec PHP :-(
EXP: pour DECEMBRE 2005 AVEC COMPARAISON 2004
SELECT code_article,sum(Case When annee='2005' Then qte Else 0 End) as qte,sum(Case When annee_facture='2004' Then qte Else 0 End) as qtepre,sum(Case When annee='2005' Then achat Else 0 End) AS achat,sum(Case When annee_facture='2004' Then achat Else 0 End) AS achatpre ,sum(Case When annee='2005' Then montant_net_fact Else 0 End ) AS chiffaff ,sum(Case When annee='2004' Then montant_net_fact Else 0 End ) AS chiffaffpre,sum(Case When annee='2005' Then marge Else 0 End ) AS marge,sum(Case When annee='2004' Then val_marge Else 0 End ) AS margepre from ventes WHERE mois <='12' GROUP BY code_article ORDER BY chiffaff DESC
Quelqu'un y comprends quelque chose ???
Merci de m' aider SVP , là je patoge ..
C'est pas le temps d'execution en php , je l' ai mis a 0 dans php.ini ....
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 16 janv. 2006 à 16:07
Moi ce que je voudrais voir, c'est le code PHP qu'il utilise.
Car si ca marche via SQL, ca marche aussi pour PHP.
Je suis quasi sur que c'est un problème de guillemets...
$query ="SELECT code_article,sum(Case When annee='$aAnnee' Then qte Else 0 End) as qte,sum(Case When annee='$anneePre' Then qte Else 0 End) as qtepre,sum(Case When annee='$aAnnee' Then achat Else 0 End) AS achat,sum(Case When annee='$anneePre' Then achat Else 0 End) AS achatpre ,sum(Case When annee='$aAnnee' Then montant_net_fact Else 0 End ) AS chiffaff ,sum(Case When annee='$anneePre' Then montant_net_fact Else 0 End ) AS chiffaffpre,sum(Case When annee='$aAnnee' Then marge Else 0 End ) AS marge,sum(Case When annee='$anneePre' Then val_marge Else 0 End ) AS margepre from ventes WHERE mois <='$aMois'";
if ($aFourniseur!="")
{
$where = $where." AND code_four='$aFournisseur'";
}
if ($aMagasin!="")
{
$where = $where." AND code_mag='$aMagasin'";
}
$query = $query .$where ." GROUP BY code_article ORDER BY chiffaff DESC";
// je faits un echo de la requete , puis copier et coller dans analyseur de requete
// et elle marche ...mais pas ici
echo $query ;
$result=mssql_query ($query,$idConn);
$nb=mssql_num_rows($result);
for ($i=0;$i<$nb;$i++)
{
$row=mssql_fetch_row($result);
echo $row[0]."-".$row[1]."-".$row[2]."-".$row[3];
}
mssql_close($idConn);
}
-------------------------------------
Voila , si vous pouvez me donner une piste .... je pensais au temps d' execution , car ca demande un peu de temps .. mais bon je sais pas trop ......
espadon2
Messages postés71Date d'inscriptionjeudi 19 juin 2003StatutMembreDernière intervention21 octobre 2008 16 janv. 2006 à 17:28
Ben il faut activer mssql dans php.ini c'est tout ...en retirant le point virgule devant
extension=php_mssql.dll
je vais pas attaquer une base microsoft SQL 2000 avec mysql_query ...etc .. !!!???? va pas bien marcher ca ...
mysql c'est juste .. ben pour une base mysql ...
Mais merci tout de meme......
ma fonction marche une fois , puis a le seconde execution elle plante ... bref c'est un peu aléatoire ..c'est ce que je pige pas ... je faits bien mssql_free_result, je ferme bien ma base ... mais rien .. le probleme ne vierndrai pas de PHP (essayer avec php4.1 et php 5.0) , ou SQL 2000 tout simplement , un bug ???
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 16 janv. 2006 à 17:44
Essaye un mssql_get_last_message () sur ton mssql_query () pour voir si on a plus d'infos.
En attendant, tu devrais réflêchir à une autre façon de requêter, parce que faire autant de sommes, avec autant de conditions, sur une grosse table...ça risque de faire bcp, en effet.
sidf
Messages postés1216Date d'inscriptionmardi 20 décembre 2005StatutMembreDernière intervention18 octobre 20125 16 janv. 2006 à 17:48
il faudrait savoir dans quelles conditions la fonction plante et celles où elle ne plante pas
$where n'est jamais initialisé mais je ne sais pas si ça a une incidence
espadon2
Messages postés71Date d'inscriptionjeudi 19 juin 2003StatutMembreDernière intervention21 octobre 2008 16 janv. 2006 à 17:53
j' ai fait un get_last_message et j 'obtient
Le contexte de la base de données a été changé en 'achat_vente'.
pourtant , rien ne se passe sur la base ... j' en perd un peu mon latin ... mais ca marche de temps en temps
c'est comme si le serveur arriver a bout de souflle de temps en temps et plantait par moment donc
oui je crois que je vais revoir ma facon de requeter ... c'est sur que c'est un peu complexe comme ca mais bon la je vois pas trop comment faire ... se genre de tableau croisé ... mais bon ...au boulot
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 16 janv. 2006 à 18:06
T'aurais pas des USE 'database' quelquepart ... ? Parce que cette erreur a trait à ça, généralement.
Bref, cela voudrait dire qu'entre ta 1ère requête, qui fonctionne, et ou le contexte était ok (bonne base de données), un USE (ou un truc similaire) a changé ce contexte (donc, changé de base de données pour l'utilisateur qui effectue la requête).
espadon2
Messages postés71Date d'inscriptionjeudi 19 juin 2003StatutMembreDernière intervention21 octobre 2008 18 janv. 2006 à 09:39
Bonjour a tous et merci..
je faits bien un free_result à la fin ...
j'utlise pas de "USE" database ...
je pense que le probleme vient du serveur , car tard le soir , quand plus personne ne travaille , c'est a dire que le serveur est moins sollicité , ca se passe mieux ... marche 3/4 fois .. puis ca plante... bref .. faut que je revois ma requette a mon avis...