Bonjour, je suis actuellement en train de développer un moteur de recherche et j'ai passé l'après-midi à programmé une commande SQL permettant de trier par pertinence mes résultats, ça marche très bien.

Le problème c'est que la recherche se fait actuellement en deux temps, sur deux tables différentes avec les mêmes champs (enfin en ce qui concerne cette commande SQL précisément), j'avais fait un while() en PHP et j'affichais les résultats d'une table puis de l'autre. Je viens de réaliser que c'était pas du tout la bonne méthode puisque ça coupe complétement cette idée de pertinence le fait de séparer les résultats des deux tables.

Me rappelant qu'on pouvait joindre des tables en SQL je me suis renseigné (j'ai encore jamais appliqué de jointure, j'en avais pas eu besoin jusque là), mais ça bug, ça ne marche pas du tout...

Je m'en remet donc à vous après avoir longuement chercher une solution, mais sans y arriver...

(La commande SQL n'est ici pas dynamique puisque c'est le résultat d'un echo() - sinon c'est illisible pour vous - mais l'idée est là)

Commande qui marche:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
SELECT (title LIKE '%test moteur%') as found_exact, ( (title LIKE '%test%') + (title LIKE '%moteur%') ) AS found_count, id, title, description, rate, preview, genre, type, file_size, vote_up, vote_down, uploader 

FROM directlink 

WHERE (title LIKE '%test%' OR title LIKE '%moteur%') AND (genre = 'game') 

ORDER BY found_exact DESC, found_count DESC, (vote_up-vote_down) DESC LIMIT 50;
Commande qui ne marche pas:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
SELECT (title LIKE '%test moteur%') as found_exact, ( (title LIKE '%test%') + (title LIKE '%moteur%') ) AS found_count, id, title, description, rate, preview, genre, type, file_size, vote_up, vote_down, uploader 

FROM directlink, filehosting 

WHERE (title LIKE '%test%' OR title LIKE '%moteur%') AND (genre = 'game') 

ORDER BY found_exact DESC, found_count DESC, (vote_up-vote_down) DESC LIMIT 50;
J'ai bien vérifié, les champs appelés sont exactement les mêmes au niveau de la structure, je ne sais donc pas quoi faire, et vu que la commande est assez compliqué c'est délicat de trifouiller :-(

Merci beaucoup pour votre aide