Je cherche à faire des statistiques sur la fonctionnalité de recherche de mon site, celle-ci possède des critères afin de filtrer les recherches (par exemple on peut choisir de rechercher uniquement en français, en anglais ou alors on ne le précise pas et on sera susceptible de trouver des résultats dans les deux langues). Chaque recherche est enregistrée dans une table de ma base de donnée.
J'aimerai donc crée des tableaux avec le nombre de recherches en fonction des différents critères sur une période donnée. J'utilise pour l'instant des requêtes de ce style :
SELECT COUNT(SA_language) FROM search WHERE SA_date >= $dateDebut AND SA_date <= $dateFin GROUP BY SA_language
Et je récupère le résultat dans un tableau que je peux ensuite exploiter comme je le veux. Cependant, il arrive que dans certaines périodes je n'ai aucune recherche en anglais par exemple et du coup cela fausse mes tableaux car au lieu de récupérer un tableau du style [[non précisé, 10000], [français, 8000], [anglais, 2000]] je récupère juste [[non précisé, 5000], [français, 2000]].
J'aimerai donc modifier ma requête afin de récupérer tous les résultats possibles et donc avoir un tableau qui ressemblerait à ça [[non précisé, 5000], [français, 2000], [anglais, 0]].
Voilà, j'espère que j'ai réussi à me faire comprendre. Merci d'avance pour vos propositions et bonne journée !
SELECT
CASE
WHEN max(SEARCH.Sa_language) = 0 THEN 'ALL'
WHEN max(SEARCH.Sa_language) = 1 THEN 'FRANCAIS'
WHEN max(SEARCH.Sa_language) = 2 THEN 'ANGLAIS'
ELSE 'AUTRE' end ,
COUNT(X_SEARCH.Sa_language)
FROM search
LEFT JOIN SEARCH X_SEARCH ON SEARCH.Sa_id = X_SEARCH.Sa_id AND X_SEARCH.Sa_date BETWEEN $dateDebut AND $dateFin
GROUP BY SEARCH.Sa_language
Si tu veux rajouter un langage dans ta recherche tu as juste à ajouter une clause dans le case.
Dis moi si c'est ok
L'erreur dans un code se situe très souvent entre le clavier et la chaise. =D
En gros ça va créer une table cachée avec les colonnes que tu veux, et ça va permettre de chercher dans moins de données pour ressortir plus vite les résultats de ta requête.
Ici, tu peux mettre dans un index Sa_id et Sa_date ( Je tiens à préciser que je ne suis pas un pro en Sql, peux être qu'il faut rajouter Sa_language, mais je ne pense pas que ce soit le cas )
Alors après vérifications, la table possédait déjà des index pour les colonnes Sa_id et Sa_date (un pour chaque). J'ai essayé d'en crée un nouveau contenant les deux colonnes ensemble mais cela ne générait pas de gain de temps. J'en ai finalement crée un pour Sa_language qui m'a fait gagné une dizaine de seconde mais cela reste encore très long...
SELECT
Langue,
COUNT(search.Sa_language)
FROM Langues
LEFT JOIN SEARCH search ON SEARCH.Sa_language = Langues.Code AND SEARCH.Sa_date BETWEEN $dateDebut AND $dateFin
GROUP BY Langue
Dis ce que tu en penses
- Edité par DrGazi7 18 juillet 2019 à 12:58:00
L'erreur dans un code se situe très souvent entre le clavier et la chaise. =D
Je pense que crée une nouvelle table est bien la meilleure solution, je suis passé à un temps d’exécution très raisonnable !
Encore merci de ton aide ! Bonne journée
[MySQL] Select le nombre d'occurence
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
L'erreur dans un code se situe très souvent entre le clavier et la chaise. =D
L'erreur dans un code se situe très souvent entre le clavier et la chaise. =D
L'erreur dans un code se situe très souvent entre le clavier et la chaise. =D
L'erreur dans un code se situe très souvent entre le clavier et la chaise. =D