dolibarr-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Dolibarr-dev] Multi-SGBD


From: Régis Houssin
Subject: Re: [Dolibarr-dev] Multi-SGBD
Date: Thu, 20 Sep 2007 21:08:29 +0200
User-agent: RoundCube Webmail/0.1-rc1

oui effectivement c'est bien, l'ordre d'appel des tables n'était pas
correcte.
j'en ai profité pour en corrigé d'autres, il en reste encore dans
certaines classes

Je te remercie
Régis


On Thu, 20 Sep 2007 20:22:06 +0200, "Laurent Destailleur (Eldy)"
<address@hidden> wrote:
> Peux-tu essayer avec le code suivant:
> 
> $sql = "SELECT sum(f.total) as tot_fht, sum(f.total_ttc) as tot_fttc,";
> $sql.= " s.nom, s.rowid as socid,";
> $sql.= " p.rowid, p.ref, p.facture, p.fk_statut, p.total_ht,
p.total_ttc";
> if (!$user->rights->commercial->client->voir && !$socid) $sql .= ",
> sc.fk_soc, sc.fk_user ";
> $sql.= " FROM ".MAIN_DB_PREFIX."societe AS s, ";
> if (!$user->rights->commercial->client->voir && !$socid) $sql .= "
> ".MAIN_DB_PREFIX."societe_commerciaux as sc, ";
> $sql.= " ".MAIN_DB_PREFIX."commande AS p";
> $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."co_fa AS co_fa ON co_fa.fk_commande
=
> p.rowid";
> $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."facture AS f ON co_fa.fk_facture =
> f.rowid";
> 
> J'ai juste mis la table commande en dernier car c'est elle qui est 
> utilisée pour la jointure externe.
> 
> Assure toi que j'ai pas d'eereur de syntaxe dans le sql généré.
> Et teste la avec et sans parenthese autour des tables du from et avant 
> le left join.
> Sous mysql et msqsl.
> 
> 
> 
> Régis Houssin a écrit :
>> par exemple dans /htdocs/compta/index.php on a cette requête :
>>
>> -------------------------------------------------------------------
>> $sql = "SELECT sum(f.total) as tot_fht, sum(f.total_ttc) as tot_fttc,";
>> $sql.= " s.nom, s.rowid as socid,";
>> $sql.= " p.rowid, p.ref, p.facture, p.fk_statut, p.total_ht,
> p.total_ttc";
>> if (!$user->rights->commercial->client->voir && !$socid) $sql .= ",
>> sc.fk_soc, sc.fk_user ";
>> $sql.= " FROM (".MAIN_DB_PREFIX."societe AS s,
> ".MAIN_DB_PREFIX."commande
>> AS p";
>> if ($user->rights->commercial->client->voir || $socid) $sql .= ")";
>> if (!$user->rights->commercial->client->voir && !$socid) $sql .= ",
>> ".MAIN_DB_PREFIX."societe_commerciaux as sc)";
>> $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."co_fa AS co_fa ON co_fa.fk_commande
> =
>> p.rowid";
>> $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."facture AS f ON co_fa.fk_facture =
>> f.rowid";
>> --------------------------------------------------------------------
>>
>> qui met entre parenthèses les tables après le FROM pour palier au
>> problème avec LEFT JOIN qu'on avait
>>
>> avec MSSQL on obtient cette erreur :
>>
>> ---------------------------------------------------------------------
>> TYPE GESTIONNAIRE DE BASE DE DONNÉE: mssql
>> REQUETE DERNIER ACCES EN BASE EN ERREUR: SELECT sum(f.total) as
>> tot_fht, sum(f.total_ttc) as tot_fttc, s.nom, s.rowid as socid,
>> p.rowid, p.ref, p.facture, p.fk_statut, p.total_ht, p.total_ttc FROM
>> (llx_societe AS s, llx_commande AS p) LEFT JOIN llx_co_fa AS co_fa ON
>> co_fa.fk_commande = p.rowid LEFT JOIN llx_facture AS f ON
>> co_fa.fk_facture = f.rowid WHERE p.fk_soc = s.rowid AND p.fk_statut =
>> 3 AND p.facture=0 GROUP BY p.rowid
>> CODE RETOUR DERNIER ACCES EN BASE: DB_ERROR_SYNTAX
>> ---------------------------------------------------------------------
>>
>>
>> si j'enlève les parenthèses et que l'utilisateur n'a pas le droit de
> voir
>> tous les clients, j'ai cette erreur sous MYSQL:
>>
>> ---------------------------------------------------------------------
>> Dolibarr a détecté une erreur technique.
>> Voici les informations qui pourront aider au diagnostic:
>>
>> Type gestionnaire de base de donnée: mysqli
>> Requete dernier acces en base en erreur: SELECT sum(f.total) as tot_fht,
>> sum(f.total_ttc) as tot_fttc, s.nom, s.rowid as socid, p.rowid, p.ref,
>> p.facture, p.fk_statut, p.total_ht, p.total_ttc, sc.fk_soc, sc.fk_user
> FROM
>> llx_societe AS s, llx_commande AS p, llx_societe_commerciaux as sc LEFT
>> JOIN llx_co_fa AS co_fa ON co_fa.fk_commande = p.rowid LEFT JOIN
>> llx_facture AS f ON co_fa.fk_facture = f.rowid WHERE p.fk_soc = s.rowid
> AND
>> s.rowid = sc.fk_soc AND sc.fk_user = 1 AND p.fk_statut = 3 AND
> p.facture=0
>> GROUP BY p.rowid
>> Code retour dernier acces en base: DB_ERROR_NOSUCHFIELD
>> Information sur le dernier accès en base: Unknown column 'p.rowid' in
> 'on
>> clause'
>> ----------------------------------------------------------------------
>>
>>
>> Régis
>>
>>
>> On Thu, 20 Sep 2007 10:00:53 +0200, "Laurent Destailleur (Eldy)"
>> <address@hidden> wrote:
>>   
>>> La premiere chose a faire est de corriger les pb de requetes trop 
>>> specifiques.
>>> Car si elles ne fonctionne pas avec un autre SGBD, elle ne 
>>> fonctionneront avec aucune couche d'abstraction (que ce soit PDO, ou
>>> autre).
>>> Il ne devrait pas y avoir de tel code.
>>>
>>> As-tu un exemple de tel requete ?
>>>
>>>
>>> Régis Houssin a écrit :
>>>     
>>>> Bonjour,
>>>>
>>>> Après plusieurs tests sur MSSQL (grace à Simon Desee) il s'avère
> que
>>>> plusieurs requête dans le code sont trop spécifique à mysql et pose
>>>> problème, il faudrait qu'on voit pour utiliser soit PDO (qui
> imposerait
>>>> PHP5), soit ADOdb qui est compatible PHP4/PHP5 (PHP4 allant
> disparaitre
>>>> !!!) afin de faire une réelle couche d'abstraction, ce qui
> permettrait
>>>> d'être vraiment Multi-SGBD.
>>>>
>>>> Qu'en pensez-vous ?
>>>>
>>>> Régis
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Dolibarr-dev mailing list
>>>> address@hidden
>>>> http://lists.nongnu.org/mailman/listinfo/dolibarr-dev
>>>>
>>>>   
>>>>       
>>>
>>>     
> 
> 
>
-- 
Cordialement
Houssin Régis





reply via email to

[Prev in Thread] Current Thread [Next in Thread]