Archives de la liste a​i​d​e​@p​a​h​e​k​o​.c​l​o​u​d​

Embrouille de requêtes SQL et autres

adresse riseup

22/03/2020 18:52:48

Holà,

J'essayais de bidouiller au tour de ce ticket, pour faire des rapports
par mois :
https://fossil.kd2.org/garradin/tktview?name=f323116b12

Bohwaz eu commenté :
« Il suffit de passer le bon critère en paramètre aux méthodes
Rapports::compteResultat et Rapports::bilan :) »


Donc je suis allé regarder ça, et quels étaient les critères en
question, et je suis un peu bloqué sur comment sélectionner une plage de
date.

Parce que ça ressemble à ça :
$rapports->compteResultat($criterias, [6, 7])

Et $criterias passe par la méthode getWhereClause qui fait basiquement :

        foreach ($criterias as $name => $value)
        {
            $where[] = $db->where($name, $value);
        }
        return implode(' AND ', $where);

et en ayant décortiqué le fonctionnement de DB::where, ben je me rends
compte qu'elle gère que peu d'opérateurs (IN, IS, =, NOT IN..) et que
$value se retrouve 'quotée'.


J'ai essayé de magouillé en utilisant un IN en faisant :
$criterias['date'] = ['SELECT date FROM compta_journal WHERE date >=
2019-01-01 AND date < 2019-02-01'];

...mais le fait que ça se retrouve quoté, fait que c'est considéré comme
une valeur et une subquery :(
// $where == "id_exercice = 2 AND date IN ('SELECT date FROM
compta_journal WHERE date >= 2019-01-01 AND date < 2019-02-01')"


Je sais pas si mon problème est clair, mais du coup, si quelqu'un·e a
une idée de comment y arriver ?
Ou quelle méthode il serait le plus moins galère de modifier pour pas
passer par DB::where ? Bohwaz avait l'air de dire que c'était possible,
donc modifier compteResultat me semble pas la meilleure idée, mais en
même temps je vois pas trop comment m'en sortir sans...

Donc si jamais quelqu'un·e arriverait à m'éclairer, ça serait chouette :)

Re: Embrouille de requêtes SQL et autres

adresse riseup

22/03/2020 19:27:17

Bien, écrire ce mail m'a finalement fait trouver une solution juste après :)
Il me suffisait d’exécuter ma requête de dates avant, au lieu dans
l'envoyer dans $criterias, et ensuite de peupler $criterias avec les
résultats de la requête...

adresse riseup:
> Holà,
> 
> J'essayais de bidouiller au tour de ce ticket, pour faire des rapports
> par mois :
> https://fossil.kd2.org/garradin/tktview?name=f323116b12
> 
> Bohwaz eu commenté :
> « Il suffit de passer le bon critère en paramètre aux méthodes
> Rapports::compteResultat et Rapports::bilan :) »
> 
> ...

Re: Embrouille de requêtes SQL et autres

Xavier Remongin

23/03/2020 09:41:47

Hello

Du coup, tu peux nous donner la requête exact?

Merci


Xavier

On Sun, Mar 22, 2020 at 7:27 PM adresse riseup <adresse@riseup.net> wrote:

> Bien, écrire ce mail m'a finalement fait trouver une solution juste après
> :)
> Il me suffisait d’exécuter ma requête de dates avant, au lieu dans
> l'envoyer dans $criterias, et ensuite de peupler $criterias avec les
> résultats de la requête...
>
> adresse riseup:
> > Holà,
> >
> > J'essayais de bidouiller au tour de ce ticket, pour faire des
rapports
> > par mois :
> > https://fossil.kd2.org/garradin/tktview?name=f323116b12
> >
> > Bohwaz eu commenté :
> > « Il suffit de passer le bon critère en paramètre aux méthodes
> > Rapports::compteResultat et Rapports::bilan :) »
> >
> > ...
>
> --
> . ____
>  / ___|  Liste d'entraide des utilisateurs de Garradin
> | |  _   http://garradin.eu/
> | |_| |
>  \____|  Désinscription : http://garradin.eu/aide/
>

Re: Embrouille de requêtes SQL et autres

adresse riseup

23/03/2020 20:12:25

Ben si tu veux, elle est dans le patch que j'ai envoyé ce matin :)

Ça ressemble à ça :


// Sélectionne toutes les dates pour lesquelles des écritures existent
dans ce mois
$query = 'SELECT DISTINCT date FROM compta_journal WHERE date >=
"'.$debut.'" AND date < "'.$fin.'";';

// Assemble toutes les dates existantes pour un "WHERE date IN (dates)"
via $criterias
$criterias['date'] = [];
foreach ($db->get($query) as $v}
{
    $criterias['date'][] = $v->date;
}

// Récupère les comptes de résultat pour ce mois
$res = $rapports->compteResultat($criterias, [6, 7]);



zou

Xavier Remongin:
> Hello
> 
> Du coup, tu peux nous donner la requête exact?
> 
> Merci
> 
> 
> Xavier
> 
> On Sun, Mar 22, 2020 at 7:27 PM adresse riseup <adresse@riseup.net>
wrote:
> 
>> Bien, écrire ce mail m'a finalement fait trouver une solution juste
après
>> :)
>> Il me suffisait d’exécuter ma requête de dates avant, au lieu dans
>> l'envoyer dans $criterias, et ensuite de peupler $criterias avec les
>> résultats de la requête...
>>
>> adresse riseup:
>>> Holà,
>>>
>>> J'essayais de bidouiller au tour de ce ticket, pour faire des
rapports
>>> par mois :
>>> https://fossil.kd2.org/garradin/tktview?name=f323116b12
>>>
>>> Bohwaz eu commenté :
>>> « Il suffit de passer le bon critère en paramètre aux méthodes
>>> Rapports::compteResultat et Rapports::bilan :) »
>>>
>>> ...
>>
>> --
>> . ____
>>  / ___|  Liste d'entraide des utilisateurs de Garradin
>> | |  _   http://garradin.eu/
>> | |_| |
>>  \____|  Désinscription : http://garradin.eu/aide/
>>
>