Aller au contenu
elfaus

Histoire de tableau

Noter ce sujet :

Recommended Posts

Bizour bizour,

voilà le topo, j'essaye de réaliser un graphique avec des valeurs que je peux obtenir depuis différentes tables.

Le soucis, c'est qu'il faut que je réalise certains calculs en fonction de certaines contraintes x)

J'ai par exemple 2 tables à exploiter

Ces tables sont constituées de la façon suivante

mom_cards_monsters(id,name,cost);

mom_deck_monsters(deckid,monsterid,qty);

A l'aide de la requête suivante j'obtient un premier résultat


SELECT cost, qty
FROM mom_deck_monsters
INNER JOIN mom_cards_monsters
ON mom_deck_monsters.monsterid = mom_cards_monsters.id
WHERE deckid = 1



array (
array(1,5),
array(2,3),
array(2,1),
array(5,3)
)

Chouette, mais pour le moment non exploitable happy.gif'

Il faudrait que les valeurs (qty) dont le cost est identiques soit additionnées entre elles.

J'ai bien trouvé array_sum dans la documentation, mais il me faudrait quelque chose de la forme :


array (
cost => array(qty,qty,qty)
)

j'ai pensé à


for ($i=1;$i<=7;$i++){
$result[] = mysql_sum($array[$i]);
}

La bonne nouvelle c'est que cost est forcément compris entre 1 et 7

Mais pour le moment, je patauge sad.gif

Modifié par elfaus

Partager ce message


Lien à poster
Partager sur d’autres sites

De ce que j'ai compris de ta demande, je ferai plus une requête de ce type plutôt que m'embêter à recalculer derrière :

SELECT cost, SUM(qty)
FROM mom_deck_monsters
INNER JOIN mom_cards_monsters
ON mom_deck_monsters.monsterid = mom_cards_monsters.id
WHERE deckid = 1 GROUP BY cost

En fait tu peux le faire en requêtant c'est quasi certain, maintenant tes intitulés sont pas clairs et comme je m'y connais mal en monstres... je pige pas ce que tu veux faire (depuis kang et kodos, je suis largué)

Partager ce message


Lien à poster
Partager sur d’autres sites

je me répond à moi même, comme quoi l'acharnement a du bon


$cost = array(0=>0,1=>0,2=>0,3=>0,4=>0,5=>0,6=>0);
while ($data = $query->fetch(PDO::FETCH_OBJ)) {
$cost[$data->cost-1] += $data->qty;
}

L'idée est simple, on crée un tableau en utilisant cost-1 pour index et qty pour valeur, ce qui permet de démarrer le tableau à 0.

On en profite pour additionner la nouvelle à la valeur précédente dont l'index est identique.

Mais il se trouve que ta requête semble tout aussi correct Oo

Pourtant j'avais pas réussi avec les group by x)

Merci merci merci :)

Partager ce message


Lien à poster
Partager sur d’autres sites

temps qu'à faire, j'aimerais optimiser cette requête


SELECT monsters.qty, sorts.qty, fortunes.qty FROM (
(SELECT SUM(qty) AS qty FROM mom_deck_monsters WHERE deckid = :id) AS monsters,
(SELECT SUM(qty) AS qty FROM mom_deck_sorts WHERE deckid = :id) AS sorts,
(SELECT SUM(qty) AS qty FROM mom_deck_fortunes WHERE deckid = :id) AS fortunes
)

J'ai essayé


SELECT SUM(mom_deck_monsters.qty), SUM(mom_deck_sorts.qty)
FROM mom_deck_monsters, mom_deck_sorts
WHERE mom_deck_monsters.deckid = 1
AND mom_deck_sorts.deckid = 1

Mais ça marche pas :/

Le plus étrange, c'est que j'ai l'impression qu'il m'additionne les tables entre elles alors que je lui précise quelle champ additionner...

Modifié par elfaus

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×