Commande d'une requête MySQL par mots les plus courants dans un champ
-
22-07-2019 - |
Question
Je me suis toujours posé la question et un client se demande maintenant si c'est faisable:
J'ai une liste de sports ventilés comme suit:
- Hockey sur glace garçons
- Tennis garçons
- Hockey sur glace féminin
- Tennis de filles
... etc
Et ils veulent que ça sorte comme:
- Hockey sur glace garçons
- Hockey sur glace féminin
- Tennis garçons
- Tennis de filles
... etc
Je me demande simplement si cela est possible en modifiant simplement la requête. Malheureusement, je ne peux pas faire en sorte que les sports ne soient pas spécifiques au genre et que leur genre soit défini séparément. Je ne peux pas éditer la base de données de manière significative. Je pensais que la meilleure façon d’aborder le problème était un "la plupart des mots en commun". requête, mais je ne sais pas comment cela se ferait.
Merci d'avance pour toute aide que vous pourrez apporter!
UPDATE: Le client a fini par abandonner la demande. Cependant, je l'aurais probablement abordée comme la réponse acceptée. Ce n’est toujours pas une façon de faire complètement satisfaisante, mais je ne suis pas sûr qu’il existe une solution plus "élégante". solution disponible dans MySQL.
La solution
Pouvez-vous faire quelque chose comme
ORDER BY SUBSTRING(sport_name, 6), SUBSTRING(sport_name, 1, 5)
en mysql si tous les sports commencent par des garçons / filles?
Sinon, les options ci-dessous pourraient être meilleures si l'espace est utilisé comme délimiteur:
ORDER BY SUBSTRING(sport_name, LOCATE(sport_name, ' ')), SUBSTRING_INDEX(sport_name, ' ', 1)
Complètement non testé car je n'ai pas essayé auparavant et je n'ai pas d'instance mysql pour le tester
Autres conseils
"La plupart des mots communs" comparent les mots courants de chaque ligne avec la ligne suivante? Ce sera assez difficile en SQL car il est difficile de faire une requête pour comparer différentes lignes les unes avec les autres.
Vous pouvez commander à l'aide d'une instruction CASE normative, mais ce ne sera pas joli:
... order by CASE sport_name WHEN 'Boys Ice Hockey' THEN 1 WHEN 'Girls Ice Hockey' THEN 2 WHEN 'Boys Tennis' THEN 3 WHEN 'Girls Tennis' THEN 4 -- etc END CASE