Bonjour,

Voila je rencontre un petit problème avec mon code. Je n'ai jamais été amené à developper en tant qu'autodidacte une jointure un peu complexe.

Ce que je fais

Je développe un petit outil pour mon boulot, qui gère un système de tâche. J'ai 3 tâbles :
-1ère tâble : Task (elle enregistre les tâches)
-2ème tâble : UpdateTask (elle enregistre les mises à jour associés aux tâches)
-3ème tâble : Users (gestion de mes utilisateurs)

Dans "updatetask" j'ai un champ qui enregistre la date de chaque entrée (date_update) associé à la tâche en question. Pour lister toute mes tâches, j'ai fait un tableau avec ce select :

$req = "SELECT task.*, users.pseudo, updatetask.date_update FROM task LEFT JOIN users ON task.idUser=users.id LEFT JOIN updatetask ON task.idTask=updatetask.id_task"; // requête SQL

Ce que je veux & Ce que j'obtiens

Mon select fonctionne et me ressort bien ce que je veux dans mon tableau mise à part qu'il me duplique les tâches qui ont plus de 1 mise à jour. Je veux juste ressortir dans ma colonne "update" la dernière date de la dernière mise à jour.

11 réponses


marrtin
Auteur
Réponse acceptée

Alors je lis les réponses. Mais quand je rajoute "as date_update" il me ressort qu'une seule tâche dans ma liste avec la date la plus récente qui se trouve dans ma table "updatetask" et qui n'est pas du tout associés à la bonne tâche en question.
Par contre, tu n'est pas obligé de m'aider donc merci à toi d'être plus aimable et compréhensible dans t'es réponses.

$req = "SELECT task.*, users.pseudo, MAX(updatetask.date_update) FROM task LEFT JOIN users ON task.idUser=users.id LEFT JOIN updatetask ON task.idTask=updatetask.id_task"; // requête SQL

devrait faire l'affaire.

PS : Tu aurais dû mettre le topic dans MySQL ^^

marrtin
Auteur

PS : Tu aurais dû mettre le topic dans MySQL ^^ : Ha oui c'est pas faux ^^"

Alors j'ai déjà essayer la fonction MAX et j'ai une erreur : "Undefined property: stdClass::$date_update"

C'est bizarre que tu aies une erreur d'objet PHP avec une requête SQL quand même

marrtin
Auteur

Hm d'après mes recherches la fonction max ne fonctionnerai que sur du "TIMESTAMP" alors que ma base updatetask est en "DATETIME", ça te parle ?

D'après l'erreur que tu obtiens (vu qu'on n'a pas le reste du code, on va deviner), il te faut juste ajouter ceci :

MAX(updatetask.date_update) as date_update

Et, je ne sais pas où tu as lu que MAX() ne marchait pas avec DATETIME, mais c'est faux.

marrtin
Auteur

Alors après je fait :

$sql = $bdd->query($req);
$res = $sql->fetchAll(PDO::FETCH_OBJ);
<?php foreach($res as $item){ 
 echo($item->date_update);
?>

Donc je confirme ma réponse :)

marrtin
Auteur

Bonjour, petit up
Je n'arrive toujours pas à ressortir la dernière "date" sur chaque tâche.
Dès que j'ajoute une mise à jour sur une tâche, il me duplique la ligne dans la liste des tâches...
Voilà mon code actuellement :

$req = "SELECT t.idTask, t.auteurTask, t.dateTask, t.titreTask, t.groupeTask, t.numTicket, t.priorite, t.idUser, users.pseudo, u.date_update
FROM task t LEFT JOIN users ON t.idUser = users.id INNER JOIN updatetask u ON t.idTask = u.id_task";

Si je met "MAX(updatetask.date_update)" j'ai une erreur : "Undefined property: stdClass::$date_update"

Si tu ne lis pas les réponses données aussi ...

...
Etre aimable c'est aussi ne pas ignorer ceux qui cherche à t'aider, avant tout.