Comment filtrer des données avec MariaDB (et PHP)?

Bonjour,
C’est assez simpliste comme titre , je l’avoue mais cela resume bien mon probleme. J’ai une table en MariaDB qui contient des listes de documents, un document est structuré comme ceci:

  • ID
  • Nom
  • User_ID
  • Category_ID
  • Groups

Les documents sont mis à jour regulierement et sont recuperé par le group plus grand c’est à dire qu’un document peut etre mis à jour aujourd’hui et dispose du group = 1, et demain tous les documents sont mis à jour et dispose tous d’un group = 2 . Ce group est different pour chaque utilisateur (user_id) .

Mon probleme est qu’il faut que je recupere (pour chaque utilisateur, exemple User_ID = 10) des documents qui ont les memes nom , du meme group mais repeté dans plusieurs catégories differentes au moins 3 fois.

J’ai fait :

select d.* from docs as d where user_id = 10 and groups = (select max(groups) from docs where user_id = d.user_id and category_id = d.category_id) group by d.nom, d.groups having count(*) > 2

Le probleme avec ca est qu’il y a des documents qui ont les meme groups et meme category_ID et meme nom qui reviennent 2 fois alors qu’il faut les exclure aussi .

Donc je cherche un moyen via PHP de comparer la collection retournée par la requete et d’exclure ces types de resultats ou de l’exclure via SQL directement.

Avez-vous une idée ?

Merci d’avance

Bonjour,
Ne faudrait-il pas plutôt écrire

having count(*) > 2

puisque vous voulez les documents compris dans au moins 3 catégories différentes ?

Oui, c’est plutot ca , j’ai fait une faute frappe. Mais le probleme reste le meme que ce soit 2 ou 3.

OK.
Et avec un DISTINCT ?

J’ai essayé avec distinct mais toujours les meme resultat

Est-ce que vous avez utilisé un autre code à part ceci ? Car il semble que le problème se trouve au niveau de votre première requête.

Human Coders - Le centre de formation recommandé par les développeur·se·s pour les développeur·se·s