Les plus longues phrases avec sql/php !

Résolu/Fermé
Elodie_79 Messages postés 73 Date d'inscription lundi 1 avril 2013 Statut Membre Dernière intervention 13 mars 2014 - 11 juin 2013 à 11:16
Elodie_79 Messages postés 73 Date d'inscription lundi 1 avril 2013 Statut Membre Dernière intervention 13 mars 2014 - 20 juin 2013 à 14:13
Bonjour,



je ne sais pas comment procéder, trouver la plus longue chaîne (phrase) dans la base de de données ,au départ j'ai un ficher qui contient des phrase séparés (des lignes il y a un retour à la ligne) je doit faire un script qui vérifie pour chaque ligne la plus longue chaîne et des garder les plus petites si elle sont dans ma base de données par exemple mon fichier contient ces lignes :
'le pays des merveilles est le rêve de tous'
'la maladie de ces enfants peut être prendre en charge'
...
...
par exemple 'le pays des merveilles' est dans ma base donc je l'affiche
'rêve' est dans ma base de donnée
'la maladie' est dans la base
'enfant' est dans la base
'prendre en charge' est dans ma base
donc je ne sais pas comment faire cette requête au début j'ai penser de récupérer le fichier dans un tableau mais et chaque variable de mon tableau est un mot 'mais il y a des phrase composée soit en 2, en 3, en 4 mot.. je doive récupérer telle qu'elle sont et si je sépare chaque mot donc je perd bcp de donnée même chose si je mets dans chaque variable 2 ou 3 mots je pers les autres donc je ne sais pas franchement comment procéder pour résoudre mon problème
merci d'avance pour votre aide :(
A voir également:

2 réponses

Utilisateur anonyme
11 juin 2013 à 14:48
salut

tu peux inverser ton like dans ta requête. C'est dire, au lieu de faire
.... AND CHAINE_BASE like '%le texte a lire%'


tu peux plutot faire :
.... AND 'le texte a lire' like concat('%',CHAINE_BASE,'%')


ensuite rajouter un
ORDER BY LENGTH(CHAINE_BASE)DESC


pour remonter les résultats les plus longs en premier est tout à faire possible
0
Utilisateur anonyme
11 juin 2013 à 14:49
en gros pour ton code, pour chaque ligne lues, tu n'as qu'une requete à faire
0
Elodie_79 Messages postés 73 Date d'inscription lundi 1 avril 2013 Statut Membre Dernière intervention 13 mars 2014 2
11 juin 2013 à 15:28
merci pour ta réponse mais ça marche pas il verifié toute la ligne est ce qu'elle est dans ma base ,moi je ne récupère pas une seule variable; dans l'exepmle que j'ai donné il va vérifier et il va trouver que 'pays' est dans ma base de données et 'pays de merveille' aussi et il va retourner 'pays de merveille' vue que c'est la plus grande chaine mais toujours dans la meme ligne il va retourné aussi'rève' car il est de ma base de données et vu qu'il n'est pas ds une grande chaine qui est dans ma base juste ce mot seule donc il va le retourner aussi
j'espère que j'ai clarifié mon problème :(
0
Utilisateur anonyme
11 juin 2013 à 17:00
oui je l'avais bien compris, mais dans un sens c'est normal que ca ressorte toutes les possibilitées, vue qu'elles sont vrai, mais toi si tu ne veux prendre que le premier résultat, et donc le plus grand, tu peux. (mais si un jours tu souhaite afficher tout ce qui concorde, ca sera déjà en place).

et non ma requête ne vérifie pas la ligne complète, d'où l'importance des %. Je m'éxplique :
tu as en base : 'pays'. Ce que ma requête fait c'est vérifier si 'pays' est contenu dans la phrase de départ. et te permettra donc de récupérer toutes les chaines de caractère présentes dans ta base et dans une partie de ta phrase.
0
Elodie_79 Messages postés 73 Date d'inscription lundi 1 avril 2013 Statut Membre Dernière intervention 13 mars 2014 2
11 juin 2013 à 17:52
j'ai déja modifié comme tu me l'as dit soit en mettant en entrée un tableau de chaque mot qoit un tableau de chaque ligne et le résultat c comme je n'est pas inversé et dans les deux cas je perd des données je ne sais pas comment faire pour ne pas perdre ni les mots simple ni les mots composé (bien sur si on a le choix on garde la ou il y a la plus longue chaine)
0
Utilisateur anonyme
12 juin 2013 à 07:46
que veux tu faire exactement? comment est fait ton code? quelles variables utilises-tu? quel est le but de ta méthode?

Ce que je t'ai donné, c'est un moyen de récupérer à partir d'une phrase unique les expressions présentes dans ta phrases et dans ta base de donnée. Pour le reste je ne vois pas quel est l'objectif.
0
Elodie_79 Messages postés 73 Date d'inscription lundi 1 avril 2013 Statut Membre Dernière intervention 13 mars 2014 2
12 juin 2013 à 16:17
je ne sais pas est ce que en faisant des classes ou des fonctions :( :(
0
Utilisateur anonyme
13 juin 2013 à 07:53
si tu ne montre pas de code, on ne peu rien faire de plus
0
Elodie_79 Messages postés 73 Date d'inscription lundi 1 avril 2013 Statut Membre Dernière intervention 13 mars 2014 2
13 juin 2013 à 09:10
Bonjour; la partie la plus importante je l'ai déjà montré:
et voila ce j'ai déjà fait:
foreach($tab as $key=>$value){// $value est une ligne de mon fichier
$requete = 'SELECT mots FROM tablet WHERE \''.mysql_real_escape_string($value). '\' LIKE concat(mots) AND page_namespace=0 ORDER BY LENGTH(mots)DESC';
$result = mysql_query($requete, $link) or die (mysql_error());
if($row=mysql_fetch_row($result)){

$tabb[]=$value;

}}

print_r($tabb);
c'est ça mon code si je mets que chaque variable de $tab est une ligne de mon fichier , donc il vérifie pour l'ensemble de ligne est pas les mots
et si je déclare chaque variable de mon tableau est un mot de ces phrases donc il ignore les mots composés

Merci
0
Utilisateur anonyme
13 juin 2013 à 10:24
tu dois ajouter ton $row à ta table et non $value qui est ta valeur de base .. dans ton cas c'est le row[0] qui correspond aux mots de ta bdd, et il faut que tu ajoute un élément à ta table, par exemple :
$tabb[i]=$row[0]

avec i étant un compteur pour ajouter un élément à ta table. donc en gros (je vérifie pas ton code) :
$i = 0
foreach($tab as $key=>$value){// $value est une ligne de mon fichier 
$requete = 'SELECT mots FROM tablet WHERE \''.mysql_real_escape_string($value). '\' LIKE concat(mots) AND page_namespace=0 ORDER BY LENGTH(mots)DESC'; 
$result = mysql_query($requete, $link) or die (mysql_error()); 
if($row=mysql_fetch_row($result)){ 

$tabb[$i]=$value; 
$i++;

}} 
print_r($tabb); 
0
Elodie_79 Messages postés 73 Date d'inscription lundi 1 avril 2013 Statut Membre Dernière intervention 13 mars 2014 2
13 juin 2013 à 11:22
merci pour ton aide mais meme comme ça c'est sans succées il m'affiche tjr les meme résultats
0
Utilisateur anonyme
13 juin 2013 à 13:22
bah 2 choses, la première c'est que tu assignais $value dans tous les cas, donc ta requête n'avait pas d'impact. La seconde c'est que je n'ai aucunes infos.

déjà essaye d'afficher les requêtes qui sont jouée pour les contrôler, si tu peux les tester directement sur ta base de données, fais le et vois les résultats. Le code que tu écris à une forme qui donne l'impression que tu as déjà contrôlé pas mal de points, ecris plutot quelque chose du genre
foreach($tab as $key=>$value)// $value est une ligne de mon fichier 
{
	echo "<div>" . $value . "<br />";
	echo "-----------------------------------------------";
	echo "REQUETE : " . "<br />";
	$requete = 'SELECT mots FROM tablet WHERE \''.mysql_real_escape_string($value). '\' LIKE concat(mots) AND page_namespace=0 ORDER BY LENGTH(mots)DESC'; 
	echo $requete;
	$result = mysql_query($requete, $link) or die (mysql_error()); //$link sort d'où? où se fait la connexion à ta bdd ?
	$row=mysql_fetch_row($result); //le if ne sert à rien si tu fais une assignation vu que la fonction retourne un tableau. 
	echo "<br />RESULTATS : <br />"
	print_r($row) ;//regarde déjà les résultats de ta requete
	echo "</div>";

} 


comme ca tu pourra déjà controler quelle est la valeur de la ligne lue, quelle est sa requête construite et quels sont les résultats obtenus, de manière à assez propre pour être lisible (ce qui suffit pour débugger).
Regarde déjà ce que ca affiche
0