Definir un resultat colonne par colonne

Eléphant du PHP | 291 Messages

14 janv. 2009, 11:37

[ => J'avoue avoir eu du mal à trouver un titre ! ]

1) Voici mon schema :

Code : Tout sélectionner

Table "history_revenue" : id : INTEGER user_id : INTEGER amount : DECIMAL date : DATE
Je voudrai, par exemple, obtenir le tableau des revenues générés par les joueurs, jour après jour.
Plus visuellement, un tableau de ce genre :

Code : Tout sélectionner

user_id | 2008-12-01 | 2008-12-02 | 2008-12-03 | total 42 23 1 0 26 49 13 81 20 114

Je ne vois absolument pas comment faire en SQL, et meme si je devais passer par un traitement en PHP, je ne sais pas quelle serait la solution la + optimisée...
Conseils bienvenus :oops:

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Eléphant du PHP | 174 Messages

14 janv. 2009, 21:53

Bonsoir,

Le but de ton traitement est d'obtenir une ligne contenant les différentes dates et les différents montant pour un user donné.

Il suffit de transcrire cette idée pour sql :

etape 1 : selection des différents users

etape 2 : pour un user donné (qui définit une condition while), selection des dates et montants (ordonnée par date croissante).

Au niveau du code tu aurais :

Code : Tout sélectionner

$req = selection des différents user de la table while($data = mysql_fetch_array($req)){ //pour chaque user trouvé, on cherche les dates et montants $req2 = selection des dates et montants où user = $data['user_id']; while($data2 = mysql_fetch_array($req2)){ //tableau avec autant de colonnes que de dates (= mysql_num_rows($req2)); } }
Je pense que tu pourrais éventuellement utiliser GROUP BY mais je ne connais pas assez cette option pour te l'assurer.

Je ne détaille pas volontairement les requêtes SQL pour que tu prennes le temps de faire quelques recherches, en cas de problème, reviens ici :)
"Il vaut mieux avoir du luxe dans ses sentiments que sur ses habits, je ne crains, moi, le mépris de personne" Honoré De Balzac.
"On s'étonne trop de ce que l'on voit rarement et trop peu de ce que l'on voit chaque jour" Mme de Genlis
"L'absence diminue les médiocres passions et augmente les grandes comme le vent éteint les bougies et allume le feu" La RocheFoucauld
"People have hope because they can't see Death standing behind them" (anonymous)
"Of all the things I've lost, I miss my brain the most" (from a fanfic)

Eléphant du PHP | 291 Messages

15 janv. 2009, 11:53

Hum ce n'est vraiment ce que je veux faire, et ça ne me semble pas vraiment optimale ;)
Pour le moment j'obtiens des performances "suffisantes" mais pas optimale avec une seule requete, et en construisant moi même mon tableau en mémoire avec une solution algorithmique.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 janv. 2009, 12:17

Je ne pense pas qu'il soit possible d'obtenir directement depuis une requête SQL le résultat que tu demandes.

Par contre, il est facile d'obtenir le résultat suivant :

Code : Tout sélectionner

+--------+------------+------------+ |user_id | date | sum(amout) | +--------+------------+------------+ | 42 | 2008-12-01 | 23 | | 42 | 2008-12-02 | 1 | | 42 | 2008-12-03 | 0 | | 49 | 2008-12-01 | 13 | | 49 | 2008-12-02 | 81 | | 49 | 2008-12-03 | 20 | +--------+------------+------------+
Et de se tableau, il est simple d'obtenir le total et de construire ce que tu demandes.

Et, effectivement, il faut passer par un GROUP BY.
Est-ce que tu as besoin de plus de précisions sur la requête à utiliser ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 291 Messages

20 janv. 2009, 17:23

Non je te remercie c'est exactement la voix que j'avais suivie ;)
J'obtiens des performances suffisantes pour une grosse collection de données.