7 votes

Requêtes de recherche PHP mysql

J'essaie de créer un moteur de recherche pour un site basé sur l'inventaire. Le problème est que j'ai des informations à l'intérieur de bbtags (comme dans [b]test[/b] sentence le test devrait être évalué à 3 alors que sentence devrait être évalué à 1 ).

Voici un exemple d'index :
My test sentence, my my (a une UGS de TST-DFS )
La base de données :

|Product|  word  |relevancy|
|   1   |   my   |    3    |
|   1   |  test  |    1    |
|   1   |sentence|    1    |
|   1   | TST-DFS|    10   |

Mais comment pourrais-je faire correspondre TST-DFS si l'utilisateur a tapé TST DFS ? Je voudrais que cet UGS ait une pertinence de disons 8 au lieu de la version complète 10 ..

J'ai entendu dire que la fonction de recherche FULL TEXT de MySQL serait utile, mais je n'arrive pas à trouver une bonne façon de procéder. J'aimerais éviter des choses comme les UNIONS, et garder la requête aussi optimisée que possible.

Toute aide pour trouver un bon système à cet effet serait la bienvenue.

Merci, Max

0voto

Daniel Pereira Points 1413

J'ajouterais une colonne qui est dépouillée de tous les caractères spéciaux, des fautes d'orthographe, et ensuite mise en majuscule (ou créer une fonction qui compare sur le texte qui a été dépouillé et mis en majuscule). De cette façon, votre pertinence sera cohérente.

0voto

cetver Points 3152
/*
q and q1 - you table
this query takes too much resources,
make from it update-query ( scheduled task or call it on_save if you develop new system )
*/
SELECT
       CASE
              WHEN word NOT REGEXP "^[a-zA-Z]+$"
                     /*many replace with junk characters
                     or create custom function
                     or if you have full db access install his https://launchpad.net/mysql-udf-regexp
                     */
              THEN REPLACE(REPLACE( word, '-', ' ' ), '#', ' ')
              ELSE word
       END word ,
       CASE
              WHEN word NOT REGEXP "^[a-zA-Z]+$"
              THEN 8
              ELSE relevancy
       END           relevancy
FROM   ( SELECT 'my' word,
               3     relevancy

       UNION

       SELECT 'test' word,
              1      relevancy

       UNION

       SELECT 'sentence' word,
              1          relevancy

       UNION

       SELECT 'TST-DFS' word,
              10 relevancy
       )
       q

UNION

SELECT *
FROM   ( SELECT 'my' word,
               3     relevancy

       UNION

       SELECT 'test' word,
              1      relevancy

       UNION

       SELECT 'sentence' word,
              1          relevancy

       UNION

       SELECT 'TST-DFS' word,
              10 relevancy
       )
       q1

0voto

it is a page coading where query result shows

**i can not use functions by use them work are more easier**

 <html>
 <head>
 </head>
 <body>
 <?php
//author S_A_KHAN
//date 10/02/2013
 $dbcoonect=mysql_connect("127.0.0.1","root");
 if (!$dbcoonect)
{
die ('unable to connect'.mysqli_error());
 }
 else
 {
 echo "connection successfully <br>";

 }
 $data_base=mysql_select_db("connect",$dbcoonect);

 if ($data_base==FALSE){

die ('unable to connect'.mysqli_error($dbcoonect));
  }
 else
  {
echo "connection successfully done<br>";
    ***$SQLString = "select * from user where id= " . $_GET["search"] . "";
$QueryResult=mysql_query($SQLString,$dbcoonect);***

echo "<table width='100%' border='1'>\n";
    echo "<tr><th bgcolor=gray>Id</th><th bgcolor=gray>Name</th></tr>\n";
    while (($Row = mysql_fetch_row($QueryResult)) !== FALSE) {
        echo "<tr><td bgcolor=tan>{$Row[0]}</td>";
        echo "<td bgcolor=tan>{$Row[1]}</td></tr>";
    }
}
?>

 </body>
 </html>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X