Probleme d'affichage

Fermé
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 - 20 févr. 2008 à 15:20
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 - 21 févr. 2008 à 17:31
Bonjour,

supposons que j'ai dans une ligne de ma BDD les mots clé suivants: atomes physique
dansune autre ligne de ma BDD les mots clé suivants : atomes

comment faire pour que quand je fais une recherche par mots clé si je tape : atomes physique il ne maffiche qu'une fois la ligne où les mots clé sont atomes physique et une fois la ligne où les mots clé sont atomes

actuellement cela maffiche : atomes physiques
atomes
atomes physique

car il regarde dabord pour atomes et il affiche les lignes correspondantes puis fais pareil avec physique sans regarder si il ne va pas réecrire la meme ligne....je ne sais pas tro quoi mettre dans mon if pour dire qu'il ne réaffiche pas une ligne déja affichée....

merci d'avance ...urgent!!

26 réponses

croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
20 févr. 2008 à 15:27
Regarde ce qui était dans mon message récent sur un de tes précédents fils en remplaçant les AND par des OR et en réflechissant.
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
20 févr. 2008 à 15:41
3. le fait de générer un SELECT par mot-clef de recherche n'est pas bon : utilise plutôt WHERE motClef like '%physique%' OR motClef like '%chimie%' etc...



tru me mets ca mais moi dans ma requetre j'ai un motsclé like %'$_POST['motsclé']'% donc je ne peux pas mettre de OR....
voila pourquoi je ne sais pas comment faire
0
croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
20 févr. 2008 à 15:52
Je comprend que dans $_POST['motsclé'] tu as une liste de mots clefs.

Utilise explode pour les séparer les uns des autres puis LIKE ... OR ....
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
21 févr. 2008 à 12:05
j'ai utilisé explode et le probléme avec plusieurs mots clé et résolu mais il restequand meme le probléme ou cela affiche plusieurs fois.
en effet si je tape lolo lala dans motsclé il recherche d'abord dans la bdd lolo dans le champs lotsclé de la bdd puis aprés lala donc si je tape lolo lala il affichera 2fois le résultat
je ne sais pas comment faire
je pensais faire un truc du genre if($donnees['id'] deja affiché) ne pas réaffiché mais je ne sais pa commet l'écrire
please help me c'est urgent!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
21 févr. 2008 à 12:25
Tu ne dois avoir qu'un seul select avec where et les like.

Est-ce bien le cas ?

Copie la partie de ton scrit qui génère cette requête sql.
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
21 févr. 2008 à 12:30
$mots = explode(" ", $_POST['motsclé']);
<?php

if (($_POST['auteur']=='') && ($_POST['titre']=='') && ($_POST['année']=='') && ($_POST['journal']=='') && ($_POST['motsclé']!=''))
{
for($i=0;$i<sizeof($mots);$i++)
{

$reponse = mysql_query("SELECT * FROM base_physique WHERE motsclé LIKE '%".$mots[$i]."%'");

while ($donnees = mysql_fetch_array($reponse))
{

?>
<p>
<?php echo $donnees['id'];?><br />
Les mots clé de la recherche sont:<?php echo $donnees['motsclé']; ?> <br/></p>
<?php
}
}
}
?>



quand jaffiche id dans lexemple precedent cela maffiche 1 3 1 donc je voudrais juste 1 3
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
21 févr. 2008 à 12:49
quelqu'un aurait une idée???
0
croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
21 févr. 2008 à 13:14
Tu génères un SELECT par mot-clef, il est donc normal que tu récupères plusieurs fois le même résultat.

Est-ce-que tu comprends pourquoi ?

Ceci acquis tu pourras essayer de modifier ton script pour ne générer qu'un seul select avec une clause WHERE regroupant plusieurs LIKE (un par mot-clef.
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
21 févr. 2008 à 13:24
non je ne comprends pas pourquoi et encore moins ce que je dois faire pour aboutir au bon résultat....
si tu peux me onner un coup de main en me montrant un bout de code pour me mettre sur la route car la je n'arrive plus a avancer...
0
croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
21 févr. 2008 à 13:43
Il est indispensable que tu comprennes le premier point : supposons que tu aies deux mots clefs ( 'atome' et 'physique') comme critère de sélection, ton script actuel va exécuter deux select sql.

Le premier avec WHERE motscle LIKE '%atome%' va te retourner les enregistrements 1, 3 et 10

le second avec WHERE motscle Like '%physique%' va te retourner de nouveau l'enregistrement 1 si la colonne motcle de celui-ci contient 'atome' et 'physique'

Avant de passer au point suivant recommandation déjà faite de ne pas utiliser de caractères accentués pour les noms de colonnes sql : remplace motclé par motcle

Ce point bien compris, il est clair qu'il faut générer un seul SELECT. Quelle sera la clause WHERE de ce select unique ?

Donne-moi ta réponse et nous pourrons avancer.
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
21 févr. 2008 à 13:59
c'est pas possible de mettre dans ma reqete ou il y a le WHERE un truc du genre :
WHERE motsclé LIKE '%".$mots[$i]."%' AND pas encore affiché");
mais je sais pas comment faire ca j'ai essayé plein de trucs mais en vain...
0
croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
21 févr. 2008 à 14:13
Procédons par étape :
- as-tu remplacé motclé par motcle ?
- as-tu compris la raison pour laquelle il ne faut qu'un select ?
- quelle clause WHERE faut-il générer ?

Nous verrons ensuite comment générer cette clause WHERE avec PHP
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
21 févr. 2008 à 14:16
oui j'ai remplacé....
je pense avoir compris pour l'unique select
en revanche même si je vois à peu prés ce qu'il faut mettre dans le WHERE je ne vois pas du tout coment l'écrire...
0
croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
21 févr. 2008 à 14:25
Procédons par étapes : donne moi la forme du WHERE à générer
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
21 févr. 2008 à 14:28
ben justement je ne sais pas quoi mettre dans le WHERE

WHERE motsclé LIKE '%".$mots[$i]."%'");

j'avais mis ca mais cela pose le probléme de la répetition, je ne sais vraiment pas quoi mettre dans le WHERE pru que ca marche

si tu pouvais me dire quoi mettre ca m'aiderait vraiment
0
croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
21 févr. 2008 à 14:39
On se rapproche du but mais tu vas trop vite en mélangeant sql et php ce que nous ferons dans une étape ultérieure.

Que penses-tu des clauses suivantes :

WHERE motcle LIKE '%physique%' AND motcle LIKE '%atome%' AND motcle LIKE '%molécule%'

WHERE motcle LIKE '%physique%' OR motcle LIKE '%atome%' OR motcle LIKE '%molécule%'

Laquelle convient à ta problématique ? pourquoi ?
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
21 févr. 2008 à 14:44
c'est la 2eme qui est bonne...je vois ce que tu veux faire ais le probléme c'est que je ne peux pas faire cela car je ne veux pas taper à la main tous les motsclé, c'est pour cela que j'avais fais explode mais je voudrais qu'il gére le reste tout seul
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
21 févr. 2008 à 15:13
tu as une idée croy??
0
croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
21 févr. 2008 à 15:20
Quelquchose comme

<?php
$mots = explode(" ", $_POST['motsclé']);

if(($_POST['auteur']=='') && ($_POST['titre']=='') && ($_POST['année']=='') && ($_POST['journal']=='') && ($_POST['motsclé']!=''))
{
$laRequete = "SELECT * FROM base_physique WHERE";
for( $rangMotclef=0; $rangMotclef < sizeof($mots); $rangMotclef ++)
{
if( $rangMotclef > 0 )
$laRequete .= " OR ";
$laRequete .= "motcle LIKE '%" . $mots[ $rangMotclef ] . "%'"
}
}

$reponse = mysql_query( $laRequete );
if( !$reponse )
{
$message = 'Requête invalide : ' . mysql_error() . "\n";
$message .= 'Requête complète : ' . $laRequete;
die($message);
}

while( $donnees = mysql_fetch_array($reponse) )
echo $donnees['id'] . "<br />";
?>

devrait convenir.

Surtout, surtout ne fait pas un copier/coller mais analyse pour comprendre ce qui te sera nécessaire pour adapter finement à tes besoins.
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
21 févr. 2008 à 16:09
Requête invalide : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 Requête complète : SELECT * FROM base_physique WHERE




j'ai modofié les 2 3 trucs qui n'allairent pas ( les acolades ou ; ) et ca me mets ca a chaque fois le echo donnees ['id'] ne s'affiche pas...
0