Besoin d'aide ?

Problème de logique SQL

Avatar de CinquièmeDimension
CinquièmeDimension

Salut,

Comme mon titre l'indique, ce n'est pas un problème axé sur Laravel qui m'emmene mais plutôt un niveau au dessus. J'ai une table theme avec simplement un champ id, un champ libelle et un champ parent. Le champ parent est simplement l'id d'un autre theme. Il existe un thère mère qui s'appelle racine, et qui est le seul à ne pas avoir de parent.

Ce que j'aimerai faire, c'est retourner une liste hiérarchisée des themes et de leurs enfants, mais je coince sur la logique SQL. Je parle bien de SQL, car le projet doit pouvoir être créé sur Laravel mais aussi sur Symfony, donc je tappe large.

Quelqu'un a une idée ?

Avatar de CinquièmeDimension
CinquièmeDimension

Un début de solution pourrait être de ne pas avoir le theme mère racine et utiliser cette requete que j'ai trouvée:

select id, parent_id, libelle,
COALESCE(parent_id, id) as groupField
from theme
order by COALESCE(parent_id, id), parent_id, id

Mais ca ne permet qu'un niveau de profondeur, aussi, une catégorie qui hériterai d'une sous-catégorie, serait mal classée... Donc pas top !

Avatar de bestmomo
bestmomo

Salut,

Il te faut un peu de récursivité je crois.

Avatar de CinquièmeDimension
CinquièmeDimension

Merci de ta réponse bestmomo. Là où je galère également c'est que WITH n'est pas acccepté par ma base sur XAMPP (MariaDB 10.1.37) c'est pourtant une version récente.

Avatar de bestmomo
bestmomo

Apparemment WITH a été introduit avec la version 10.2.1

Avatar de CinquièmeDimension
CinquièmeDimension

J'ai update à 10.4 ce matin mais toujours pas supporté. Donc je vais passer de XAMPP a WAMP pour avoir MariaDB 10.5 (et même MySQL 8.0) et je vais re-tester

Avatar de CinquièmeDimension
CinquièmeDimension

Bon ben après avoir testé sur MySQL 8.0 et MariaDB 10.5, j'ai une erreur Type d'énoncé non reconnu. (near "WITH" at position 0)

Avec la requete:

WITH 
   tree (dataTree, idTree)
   AS (SELECT libelle, parent_id
       FROM   theme
       WHERE  libelle = 'blague'
       UNION ALL
       SELECT libelle, parent_id
       FROM   theme)
Avatar de nash
nash

Salut

Tu sera dans obligation d'une sous requete dans une jointure pour un gregroupement avec les categories principales.

Vous ne pouvez pas répondre à ce sujet.