gvosnet Posted February 23, 2006 Share Posted February 23, 2006 Hello, J'ai un petit soucis de requête SQL dans la fonction de recherche de mon site en PHP. Les faits : - Je ne suis pas un méga-pro de SQL - J'ai une table "articles" avec comme champs "code_article", "titre_article", "description". - J'ai fait une fonction de recherche qui fonctionne (enfin pas exactement comme je voudrais, mais elle fonctionne). Pour résumer je fais un truc dans le style là : SELECT article WHERE code_article LIKE '%ma_recherche%' OR titre_article LIKE '%ma_recherche%' OR description LIKE '%ma_recherche%' Mon problème : - Les résultats arrivent un peu dans n'importe quel ordre. Ce que je voudrais que la requête fasse : - Avoir une requête plus "pertinante" : afficher d'abord les articles dont le code article contient le mot recherché, puis les articles dont le titre contient le mot recherché et enfin les articles dont la description contient le mot recherché. Ce que j'ai essayer de faire (mais c'est pas vraiment top…) : - Faire 3 requêtes (une sur le code_article, une sur le titre_article, une sur la description) avec l'affichage des résultats les uns à la suite des autres. Problème : j'ai des doublons car un mot contenu dans le titre peut aussi apparaître dans la description et du coup je retrouve l'article 2 fois dans mon résultat de recherche… Voilà, j'espère avoir été à peu près clair dans l'explication du problème... Vous avez des indices ? Link to comment Share on other sites More sharing options...
NiTrOuS Posted February 23, 2006 Share Posted February 23, 2006 Et pourquoi pas avec un ORDER BY, je comprends pas .... SELECT article WHERE code_article LIKE '%ma_recherche%' OR titre_article LIKE '%ma_recherche%' OR description LIKE '%ma_recherche%' ORDER BY article, titre_article, description Link to comment Share on other sites More sharing options...
Sentinel Posted February 23, 2006 Share Posted February 23, 2006 Mets des UNION au lieu des OR. Ca fera comme 3 requêtes distinctes collées bout à bout, chacune triée et ordonnée comme tu veux. select article from table_articles where code_article LIKE '%ma_recherche%' order by article asc UNION select article from table_articles where titre_article LIKE '%ma_recherche%' order by article asc UNION etc... Link to comment Share on other sites More sharing options...
gvosnet Posted February 23, 2006 Author Share Posted February 23, 2006 Mets des UNION au lieu des OR. Ca fera comme 3 requêtes distinctes collées bout à bout, chacune triée et ordonnée comme tu veux. select article from table_articles where code_article LIKE '%ma_recherche%' order by article asc UNION select article from table_articles where titre_article LIKE '%ma_recherche%' order by article asc UNION etc... NICKEL C'est cette notion de UNION qui me manque en SQL. Mais bon, je débute encore... Merci beaucoup Sentinel, tu m'enléves une sacrée chandelle du pied, je te dois une fière aiguille Link to comment Share on other sites More sharing options...
NiTrOuS Posted February 24, 2006 Share Posted February 24, 2006 J'ai essayé moi aussi :( Link to comment Share on other sites More sharing options...
gvosnet Posted February 24, 2006 Author Share Posted February 24, 2006 J'ai essayé moi aussi :( C'est vrai, mais je pense que tu n'avais pas bien compris le but de la requête Merci quand même, c'est déjà sympa d'avoir pris le temps de lire mon problème Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.