EXÉCUTER DES REQUETE STYLE SQL SUR UN ARRAY

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 - 14 oct. 2009 à 21:26
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 18 oct. 2009 à 12:06
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50690-executer-des-requete-style-sql-sur-un-array

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
18 oct. 2009 à 12:06
Hello,

moi je comprends...j'ai fait la même chose dans ma classe aDB.
Organiser les résultats peut-être un gros gain de temps (à défaut de ressources), et on ne peut pas toujours les organiser comme on le veut en SQL : le SQL renvoie des lignes uniquement, PAS un tableau PHP. Et un tableau PHP bien organisé peut faciliter grandement la tâche (regrouper les jeux de résultats dans un tableau indexé sur la clef primaire, par exemple).
Par contre, ton code me parait bien compliqué pour ce qu'il fait...et tu aurais sans doute gagné à utiliser la SPL. Maintenant, je ne l'ai pas regardé en détail pour être franc. Simplement, ta "doc" propose des fonctionnalités basiques et le code qui en découle me parait bien complexe pour ces fonctionnalités : manque d'optimisation du code, OU doc bien trop succinte ? :-)
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
15 oct. 2009 à 13:04
Mmmmmm... Je continue de penser qu'il est préférable (car possible) de faire ce genre de tri/groupement lors de la requête, parce qu'un SGBDR est optimisé pour faire ça (grâce aux index) alors que PHP pas vraiment...
J'ai donc du mal à être convaincu, mais ce n'est que mon opinion...
prince418 Messages postés 2 Date d'inscription samedi 2 avril 2005 Statut Membre Dernière intervention 15 octobre 2009
15 oct. 2009 à 09:54
Euh ouais cochon dans le sens "codé à l'arrache entre 2 cuites et 3 pauses café"

Oui oui j'avais pas fait gaffe au phpdoc XD..ça confirme ce que je disais avant ^^

En fait ça permet, à partir du résultat d'une "grosse" requête, de procéder à différentes manip.

par exemple:

On récupère une liste d'utilisateur depuis la DB (c'est un exemple totalement bidon hein).
Disons que chaque utilisateur est définie par un type de profil, un département etc.
Sans requete supplémentaire en DB, il nous est possible de classé notre tableau d'utilisateir par profil ou département pour ainsi facilité les tratements par la suite.

tableau résultat de la requete:

Array(
[0] => Array( login => "User1", profil => "Modérateur", department => "kfc"),
[1] => Array( login => "User2", profil => "Modérateur", department => "q8k"),
[2] => Array( login => "User3", profil => "Modérateur", department => "kfc"),
[3] => Array( login => "User4", profil => "Modérateur", department => "maqdo")
)

donnera, si on fait un "order by department":

Array(
[kfc] => array(
[0] => Array( login => "User1", profil => "Modérateur", department => "kfc"),
[1] => Array( login => "User3", profil => "Modérateur", department => "kfc"),
),
[q8k] => array(
[0] => Array( login => "User2", profil => "Modérateur", department => "q8k")
),
[maqdo] => array(
[0] => Array( login => "User4", profil => "Modérateur", department => "maqdo")
)
)

voila voila
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
14 oct. 2009 à 21:26
Salut,

J'ai pas regardé en détails le code, mais pour quelqu'un qui dit avoir codé comme un cochon, c'est loin d'être aussi crade que ça ! Je peux t'assurer qu'on en a vu des bien pires, parfois qualifiées de "bien codées"...

Bref... J'avoue n'avoir pas bien bien cerné l'intérêt du machin... En fait, c'est surtout ton exemple qui me perturbe : si on récupère des données d'une bdd sous forme de tableau... En gros, tu proposes de faire une requête sur un résultat de requête... Je suis perdu, je ne comprends vraiment pas... Moi, les résultats de mes requêtes, ce sont des objets PDOStatement, qui implémente l'interface Traversable et que je passe directement comme un itérateur dans une boucle foreach dans la vue (ou dans le template).

Sinon, y'a un truc qui me fait bien rire :
* @access private
public static function groupBy($arrayToOrder,$orderBy,$distinct=false)
En commentaire phpDoc, tu mets que la méthode est en accès privé, mais la déclaration dit tout le contraire... Que faut-il en penser ? :)

Hum... faudrait que je creuse pour mieux comprendre ce que tu veux faire avec ta classe, mais je crains de n'avoir pas trop le temps...