Requête SQL CONCAT

Fermé
Quote - 16 janv. 2023 à 12:09
 Quote - 20 janv. 2023 à 15:07

Bonjour, 

J'ai une table dans ma bdd qui contient un historique de mes problèmes et je cherche à les affichés dans une colonne d'un tableau, pour ça ma requête SQL pour l'instant ne fonctionne pas comme je voudrais : 

SELECT description, date,
GROUP_CONCAT(DISTINCT `description`, " le " , `date` SEPARATOR " | ")  AS historiquetotal
from historique

Le problème c'est que ça ne me renvoi qu'un seul enregistrement :

et je crois que dans ma colonne historiquetotal ces toutes les lignes de ma tables (toutes les descriptions et dates).

Une clé étrangère fait référence a ma table problème dans la table historique et pour un problème il peut y avoir plusieurs descriptions et plusieurs dates exemple.

Un exemple du résultat que je cherche à avoir : 

Le but final serait juste de garder la colonne historique total et chaque ligne de mon tableau fera référence à un problème et il y aura donc la colonne qui renseigne les descriptions et les dates pour chaque problème.

J'espère avoir été assez clair, normalement avec ces beaux schémas ça devrait le faire ! ????

Si quelqu'un sait, merci d'avance.

A voir également:

1 réponse

jordane45 Messages postés 38317 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 30 novembre 2024 4 705
16 janv. 2023 à 17:16

Bonjour,

Il manque un GROUP BY dans ta requête


0

Bonjour, alors oui mais encore ?

J'ai donc essayé cette requête : 

SELECT probleme_id, description, date, GROUP_CONCAT(DISTINCT `description`, " le " , `date` SEPARATOR " | ") AS historiquetotal 
from historique 
group by description ORDER BY `historique`.`date` DESC

j'ai SELECT le probleme_id pour qu'on comprenne que ça ne fonctionne pas :

Je ne vois pas bien comment m'y prendre.

0
jordane45 Messages postés 38317 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 30 novembre 2024 4 705 > Quote
17 janv. 2023 à 09:56

Tu concatènes les descriptions en fonction de l'id .. donc le group by doit se trouver sur l'id .. pas sur description

0
Quote > jordane45 Messages postés 38317 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 30 novembre 2024
17 janv. 2023 à 10:32

Okay j'ai modifié ma requête : 

SELECT probleme_id, description, date, GROUP_CONCAT(DISTINCT `description`, " le " , `date` SEPARATOR " | ") AS historiquetotal from historique group by probleme_id ORDER BY `historique `.`date` DESC

 Mais c'est tjr pas ça j'ai remarqué 2 problèmesl a concaténation ne se fait pas dans l'ordre décroissant de plus si c'est le même jour je n'ai pas le dernier enregistrement : 

Possible de concaténer en fonction de l'id de ma table historique ? De manière à ce que ça me retourne la dernière insertion.

0
jordane45 Messages postés 38317 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 30 novembre 2024 4 705 > Quote
17 janv. 2023 à 10:39

Fais une sous-requête qui trie les données dans l'ordre que tu veux, puis utilise cette sous-requête pour faire ton group_concat

0
Quote > jordane45 Messages postés 38317 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 30 novembre 2024
17 janv. 2023 à 11:09

J'ai fais ça : 

SELECT probleme_id, description, date, GROUP_CONCAT(DISTINCT `description`, " le " , `date` SEPARATOR " | ") AS historiquetotal from historique
where id = (SELECT id FROM historique ORDER BY id DESC LIMIT 1)
group by probleme_id ORDER BY `historique`.`date` DESC

Mais ça va pas du tout pcq du coup il prend le dernier id de ma table historique du coup il prend q'un historique et pas tous mais je vois pas comment faire :

 id                 |
9707                |
--------------------|
probleme_id         |
 561                |
--------------------|
description         |  
 act 2              |
--------------------|
date                |
2023-01-17          |
--------------------|
historique total    |
act 2 le 2023-01-17 | 
--------------------|

Ca commence à être prise de tête ce sql à l'aide

0