Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[MySql] Je ne sais pas faire cette requête

1 réponse
Avatar
Yves On Line
Bonjour à tous,
J'avais déjà fais un post sur une requête dans une base documentaire (merci
encore antoun et pif). Je rencontre un autre problème : le ou les thèmes
(une dizaine possible) sont contenus dans un champ séparés par des #

Exemple :

Le dernier roi des francs | Histoire#Politique
Histoire des huns | Invasions#Histoire
Conflits en europe | Politique#Guerre#UE

Je dois retourner, au début de la liste de mes résultats, le nombre de
réponses par thématiques

Ici :
Histoire : 2 réponses
Politique : 2 réponses
Invasions : 1 réponse
Guerre : 1 réponse
UE : 1 réponse

Pour l'instant c'est un script php qui fait un test sur chaque ligne, ce qui
prend un temps fou.
J'envisage de faire la requête avec un groupby sur le champ thème. Mais
comme il y a plusieurs thèmes par champ je devrais toujours faire tourner
mon script php. Sur moins de fiches certes mais ce n'est pas l'idéal.
Mais peut être qu'un génie des requêtes (antoun es-tu là ? ;-) ) pourrait me
trouver qq chose directement au niveau de la requete Mysql pour obtenir mon
nombre de réponses par thématique en une seule fois ?
Yves

1 réponse

Avatar
Yves On Line
J'avais déjà fais un post sur une requête dans une base documentaire
(merci
encore antoun et pif). Je rencontre un autre problème : le ou les thèmes
(une dizaine possible) sont contenus dans un champ séparés par des #

Exemple :

Le dernier roi des francs | Histoire#Politique
Histoire des huns | Invasions#Histoire
Conflits en europe | Politique#Guerre#UE

Je dois retourner, au début de la liste de mes résultats, le nombre de
réponses par thématiques

Ici :
Histoire : 2 réponses
Politique : 2 réponses
Invasions : 1 réponse
Guerre : 1 réponse
UE : 1 réponse

Pour l'instant c'est un script php qui fait un test sur chaque ligne, ce
qui prend un temps fou.
J'envisage de faire la requête avec un groupby sur le champ thème. Mais
comme il y a plusieurs thèmes par champ je devrais toujours faire tourner
mon script php. Sur moins de fiches certes mais ce n'est pas l'idéal.
Mais peut être qu'un génie des requêtes (antoun es-tu là ? ;-) ) pourrait
me trouver qq chose directement au niveau de la requete Mysql pour obtenir
mon nombre de réponses par thématique en une seule fois ?
Yves



Je vous avais promis des nouvelles...
En fait, après quelques essais, je ne suis pas assez expert en requêtes pour
utiliser vos solutions...j'ai peur de ne pouvoir en assurer la maintenance
par la suite.
Alors voici ma solution, elle n'est pas "propre" mais elle fonctionne :
- Je fais ma première requête "normale" pour récupérer les enregistrements
correspondant à la recherche de l'utilisateur
- Je fais une deuxième requete identique, mais en ajoutant un "group by" sur
le champ thème. (en pratique il ressort rarement plus que 8-10 lignes, j'ai
testé le nombre maximal théorique est de 36 lignes (36 groupes de thèmes
différents))
- Pour chacune des lignes de cette deuxième requête je multiplie (dans une
boucle php) le count(*) renvoyé sur chaque ligne par les thèmes présents (si
sur une ligne count(*) : $histoire=$histoire+($histoire*17),
$polititique=$politique+($politique*17) etc.

Certes ce n'est pas propre mais je fais tout cela en moins d'une seconde
alors qu'en traitant jusqu'ici toutes les lignes de la première requête cela
pouvait dépasser les 30 secondes alloués au serveur pour le script !

Merci pour votre aide, même si je le fais "petit joueur" en définitive.

Yves