17-12-2007, 10:50 PM
Excuse-moi Sephi-Chan, j'avais mal lu, je pensais que tu voulais uniquement le résultat, le tout en une requête. Maintenant si je comprends bien ce que tu veux, c'est plutôt très simple...
Ca donnerait un truc du genre...
(NB: j'écris à la volée dans le text area du forum, donc ca ne tournera surement pas avec un c/c.)
Tu sors de là avec un bel objet qui représente ta seelie et ses équipements... Il y a un overhead dans le select SQL en ce sens que si 20 équipements, tu sors 20 fois les mêmes données pour les 3 premières colonnes...
Et contrairement à la solution proposée avant, on n'effectue jamais de formatage direct dans sa fonction SQL. Même si ici ca parrait propre parce qu'on ne joue qu'avec des chiffres, le jour où tu dois jouer avec d'autre données (par exemple même ici la place, le nom de l'équipement...), ca devient bien moche...
Maintenant, on pousse plus loin, seconde solution si tu veux éviter cet overhead...
Elle est pas mal mais va t'ennuyer dès que tu vas vouloir récupérer + d'infos sur la seelie dans la même requête (genre son nom, sa classe...). Ou tu jours avec les colonnes (les deux selects doivent avoir le même nombre de colonnes, etc...)
Solution 3, pareil mais en faisant deux requêtes séparées, mais là pas besoin d'expliquer je crois...
Hope this helps.
Ca donnerait un truc du genre...
(NB: j'écris à la volée dans le text area du forum, donc ca ne tournera surement pas avec un c/c.)
Code :
$sql = 'SELECT seelies.see_id, equ_force, equ_endurance, see_force, see_endurance, equ_place
FROM seelies
LEFT JOIN Seelie_has_equipement ON seelies.see_id = Seelie_has_equipement.see_id
LEFT JOIN equipements ON Seelie_has_equipement.equ_id = equipements.equ_id
WHERE seelies.see_id = 1';
// ... Execultion du SQL, résultats dans $results
if(mysql_count($results) == 0) {
throw new Exception('Seelie not found!');
}
$result = mysql_fetch_assoc($results);
$seelie[] = array();
$seelie['id'] = $result['see_id'];
$seelie['base_force'] = $seelie['force'] = $result['see_force'];
$seelie['base_endurance'] = $seelie['endurance'] = $result['see_endurance'];
$seelie['equipments'] = array();
while($result = mysql_fecth_assoc($results)) {
$equip = array();
$equip['place'] = $result['place'];
$equip['force'] = $result['equ_force'];
$equip['endurance'] = $result['equ_endurance'];
$seelie['equipments'][] = $equip;
$seelie['force'] += $equip['force'];
$seelie['endurance'] += $equip['endurance'];
}
Tu sors de là avec un bel objet qui représente ta seelie et ses équipements... Il y a un overhead dans le select SQL en ce sens que si 20 équipements, tu sors 20 fois les mêmes données pour les 3 premières colonnes...
Et contrairement à la solution proposée avant, on n'effectue jamais de formatage direct dans sa fonction SQL. Même si ici ca parrait propre parce qu'on ne joue qu'avec des chiffres, le jour où tu dois jouer avec d'autre données (par exemple même ici la place, le nom de l'équipement...), ca devient bien moche...
Maintenant, on pousse plus loin, seconde solution si tu veux éviter cet overhead...
Code :
$sql = 'SELECT see_id, see_force as fforce, see_endurance as endurance, "" as place
FROM seelies
WHERE see_id = 1
UNION
SELECT see_id, equ_force, equ_endurance, equ_place
FROM equipements, Seelie_has_equipement
WHERE equipements.equ_id = Seelie_has_equipement.equ_id
AND Seelie_has_equipement.see_id = 1';
// ... Execultion du SQL, résultats dans $results
if(mysql_count($results) == 0) {
throw new Exception('Seelie not found!');
}
$result = mysql_fetch_assoc($results);
$seelie[] = array();
$seelie['id'] = $result['see_id'];
$seelie['base_force'] = $seelie['force'] = $result['fforce'];
$seelie['base_endurance'] = $seelie['endurance'] = $result['endurance'];
$seelie['equipments'] = array();
while($result = mysql_fecth_assoc($results)) {
$equip = array();
$equip['place'] = $result['place'];
$equip['force'] = $result['fforce'];
$equip['endurance'] = $result['endurance'];
$seelie['equipments'][] = $equip;
$seelie['force'] += $equip['force'];
$seelie['endurance'] += $equip['endurance'];
}
Elle est pas mal mais va t'ennuyer dès que tu vas vouloir récupérer + d'infos sur la seelie dans la même requête (genre son nom, sa classe...). Ou tu jours avec les colonnes (les deux selects doivent avoir le même nombre de colonnes, etc...)
Solution 3, pareil mais en faisant deux requêtes séparées, mais là pas besoin d'expliquer je crois...
Hope this helps.
Eve, elle a suivi le premier venu. Elle était conne, moche, sale, absolument inculte, ne savait pas faire la cuisine, n'avais aucun charme, mais s'en foutait, elle était la seule. (Gustave Parking)