Requete SQL

mijeonasteroid Messages postés 5 Statut Membre -  
Colbi97 Messages postés 643 Statut Membre -
Bonjour, je chercherai une requete SQL permettant a partir d'une table "titre" recherche dans la "table" titre tous les textes similaires de cette table

merci.

8 réponses

  1. Colbi97 Messages postés 643 Statut Membre 12
     
    Bonjour,
    Il s'agit d'une requête de recherche de doublon ?
    Dans ce cas :
    SELECT DISTINCT *
    FROM   TaTable T1
    WHERE  EXISTS
       (SELECT *
        FROM   TaTable T2
        WHERE  T1.NomDeTonID <> T2.NomDeTonID
          AND  (LOWER(T1.ColonneAContrôler)    LIKE '%' + LOWER(T2.ColonneAContrôler) + '%'    OR LOWER(T2.ColonneAContrôler) LIKE '%' + LOWER(T1.ColonneAContrôler)+'%'))
    
    0
  2. mijeonasteroid Messages postés 5 Statut Membre
     
    $sel_article = mysql_query
    ("SELECT DISTINCT * FROM articles T1 WHERE EXISTS
    (SELECT * FROM articles T2 WHERE T1.id <> T2.id AND (LOWER(T1.titre) LIKE '%' + LOWER(T2.titre) + '%' OR LOWER(T2.titre) LIKE '%' + LOWER(T1.titre)+'%')");

    la requête ne marche pas, en faite je cherche a faire sur un site une div ou il y a les articles similaires de l'article affiché dans la page, l'article en question et dans une table "articles" contenant les champs "id" "nom" "titre" "chapeau" "texte" "vignette" "image" "categorie", le titre de l'article etant dans le champ "titre", j'aimerai que la requête affiche des articles contenant des similarités avec le titre de l'article en pleine page en comparant le texte inscrit dans le champ "titre" de la table "articles"
    j'arrive a afficher d'autres articles avec une requête simple mais pas les articles qui on une similitudes avec l'article en pleine page.

    Merci.
    0
  3. Colbi97 Messages postés 643 Statut Membre 12
     
    Ah OK, donc tu ne cherche pas des doublons (titres exactement identiques) mais des articles dont les titres seraient proches.
    Dans ce cas je te conseille de t'orienter vers la recherche fulltext qui est très efficace, malheureusement elle n'est possible qu'avec un moteur de bdd MyIsam.
    Sinon, il faut faire une fonction de recherche fulltext en php google est ton ami) mais dans ce cas le fonctionnement est plus lent...
    0
  4. mijeonasteroid Messages postés 5 Statut Membre
     
    Mon moteur de bdd est en MyIsam mais je ne sais aboslument pas comment faire une recherche fulltext pour ce cas là
    0
    1. Colbi97 Messages postés 643 Statut Membre 12
       
      As-tu lu la page de documentation que j'avais mise en lien ?
      Qu'est-ce que tu ne comprends pas?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mijeonasteroid Messages postés 5 Statut Membre
     
    le problème est que dans le AGAINST() ils mettent un mot précis, moi j'aimerais mettre une variable qui prend ce qu'il y a dans le champ titre( le texte en gros) et qu'il me sorte tous les champ titre qui ont un rapport avec le premier
    en gros j'ai mon article du genre "facebook lance son telephone portable" et j'aimerai qu'il m'affiche d'autre article en bas de page ayant un rapport avec "facebook" et cela peut importe le titre de l'article, en passant par facebook usher beyoncé black eyed peas ou tout et n'importe quoi^^
    0
  7. Eiji
     
    Et bien tu divise ta recherche a chaque espace et tu fait ta recherche sur l'index de ton fulltext. Je ne pense pas qu'il y ai une fonction SQL toute faite pour ca, en dehors du LIKE.

    Si c'est bien le cas, je te conseil de jeter un oeil aux procédures stockés, qui te feront gagné un temps non négligeable, sur ce genre de requête.
    0
  8. Colbi97 Messages postés 643 Statut Membre 12
     
    Il suffit de remplacer le contenu du AGAINST par la variable contenant ce titre (avec toutes les précautions qui s'impose...)

    $sel_article = mysql_query   
    ("SELECT id, titre, MATCH (titre) AGAINST   
    ('" . $variableContenantLeTitre . "') AS score   
    FROM articles WHERE MATCH (titre) AGAINST   
    ('" . $variableContenantLeTitre . "');  
    

    Cette requête te renvoie : l'id et le titre des articles trouvés ainsi que le niveau de ressemblance des titres (MATCH) classés dans l'ordre du plus au moins ressemblant.

    Fatal error: Call to undefined function think() in /me/head/brain.php on line 11
    In a world without walls and fences, who needs windows and gates ?
    0
  9. mijeonasteroid Messages postés 5 Statut Membre
     
    $similar = mysql_query("SELECT titre FROM articles");

    $sel_article = mysql_query("SELECT id, titre, MATCH (titre) AGAINST (' ".$similar." ') AS score FROM articles WHERE MATCH (titre) AGAINST (' " .$similar." ')");

    Voila la requête que j'ai faite avec ce que tu m'as donné mais lors de l'affichage il me met une erreur mysql_fetch_array(): supplied argument is not a valid MySQL result resource
    0
    1. Colbi97 Messages postés 643 Statut Membre 12
       
      Hum...
      Tu veux comparer chaque lignes de ta base aux autres lignes ?
      Dans ce cas il va falloir passer par une boucle en pensant à exclure de la comparaison la ligne en cours...
      0