EXÉCUTER DES REQUETE STYLE SQL SUR UN ARRAY

Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
- - Dernière réponse : malalam
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
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
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
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
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
14 -
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
-
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
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
14 -
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...