Moteur de recherche pour base mysql

Eléphant du PHP | 174 Messages

05 juil. 2005, 22:51

je recherche un script me permettant de rechercher des informations
sur une base de donnée mysql et de les afficher.
Elminio.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 juil. 2005, 23:26

ça va être dur d'avoir un script qui fonctionne pour n'importe quelle base...

c'est pour faire quoi ? un moteur de recherche pour un site ?

pourquoi tu le développerais pas toi-même ?

c'est pas si compliqué à développer : un petit formulaire, une requête de sélection des données avec quelques conditions et l'affichage

je t'ai filé un site avec des tutos dans un autre post et tu as ce super forum pour t'aider en cas de problème ;)

Eléphant du PHP | 174 Messages

06 juil. 2005, 09:35

Suite à la création de ma premiére base voir post checkbox et checkbox2
j'aimerai réalisé un moteur de recherche qui me permettent de faire resortir
des informations de mes tables concours, bande et mode.
style (présentation) google:

exemple:

j'ai un champ texte j'entre le nom d'un concour je fais ok
et il m'affiche ligne par ligne les noms des concours trouvé avec un lien pour chaque ligne pour afficher les informations concernant le concour.

par quoi dois je commencé ?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

06 juil. 2005, 09:44

même si je me rappelle vaguement de quoi tu parles car j'ai participé aux posts en question, ce n'est pas le cas de tout le monde

alors "voir post x et y" ça va pas aider tout le monde

donc fait un petit récapitulatif de la structure de tes tables ça fera pas de mal

mais pour commencer :
identifies le (ou les) champs sur le(s)quel(s) tu souhaites faire une recherche
et ensuite regarde si ce sera une recherche simple ou un peu plus complète
je veux dire par là est-ce que tu mettras des propositions et l'utilisateur choisira et donc u chercheras la correspondance exacte dans ta base
où est-ce que tu veux laisser la possibilité d'entrer un mot-clé, une partie d'un mot et trouver toutes les correspondances

Invité
Invité n'ayant pas de compte PHPfrance

06 juil. 2005, 10:05

Récapitulatif de ma base :

Code : Tout sélectionner

CREATE TABLE `bandes` ( `id_bande` smallint(5) unsigned NOT NULL auto_increment, `bande` set('160m','80m','40m','30m','20m','17m','15m','12m','10m','6m','2m','70cm') NOT NULL default '', PRIMARY KEY (`id_bande`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; CREATE TABLE `concours` ( `id_concours` smallint(5) unsigned NOT NULL auto_increment, `nom` varchar(255) NOT NULL default '', `date` varchar(255) NOT NULL default '', `report` varchar(255) NOT NULL default '', `lien` varchar(255) NOT NULL default '', `info` varchar(255) NOT NULL default '', PRIMARY KEY (`id_concours`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; CREATE TABLE `modes` ( `id_mode` smallint(5) unsigned NOT NULL auto_increment, `mode` set('phonie','télégraphie','mode digitaux') NOT NULL default '', PRIMARY KEY (`id_mode`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; CREATE TABLE `concours_bande` ( `id_concours` smallint(5) unsigned NOT NULL default '0', `id_bande` smallint(5) unsigned NOT NULL default '0', PRIMARY KEY (`id_concours`,`id_bande`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; CREATE TABLE `concours_mode` ( `id_concours` smallint(5) unsigned NOT NULL default '0', `id_mode` smallint(5) unsigned NOT NULL default '0', PRIMARY KEY (`id_concours`,`id_mode`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Les champs dont je souhaite faire des recherches sont :
nom, date, bande et mode

je reviens sur la presentation voir message précédent (exemple)

Il n' y aura qu'un champs texte dont on insere un/plusieurs mots clé ou chiffres selon les requetes, puis bouton recherche comme sous google.

ensuite lors de l'affichage du résultat celle ci se présentera sous forme
(si trois réponses se rapprochant de la requete)
Nom du concours1
Liens vers l'affichage du concour

Nom du concours2
Liens vers l'affichage du concour

Nom du concours3
Liens vers l'affichage du concour

Pages suivantes 1 2 3

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

06 juil. 2005, 10:12

OK

on va séparer en deux
1 - recherche et sélection des données
2 - la pagination des résultats

on verra le 2 une fois terminé le 1
Les champs dont je souhaite faire des recherches sont :
nom, date, bande et mode
tu ne comptes mettre qu'un seul champ texte pour tout ça ?

pour le nom tu peux :
- mettre une condition "champ_nom = $nom" : cherchera exactement le même nom
- utiliser LIKE, pour chercher un nom composé du mot entré
- utiliser les recherches plein-texte, mais c'est peut-être un peu lourd pour ce que tu cherches

pour la date :
- si l'utilisateur entre une date précise utilise un simple =
- s'il peut entrer une plage de dates, tu peux utiliser BEETWEEN

pour bande et mode :
- le plus simple serait de lister les bandes/modes disponibles, l'utilisateur fais un ou plusieurs choix parmis ces propositions
s'il n'y a qu'un seul choix possible, c'est facile tu récupères la variable et tu utilise un "champ = $variable"
s'il y a plusieurs choix possibles il faut que tu construises dynamiquement ta condition de requête

voici des pistes j'espère que j'ai été assez clair n'hésite pas à demander des précisions ;)

Eléphant du PHP | 174 Messages

06 juil. 2005, 10:22

Oui un seul champ texte comme google

j'avais oublié pour la date voici comment elle se présente :
  • 2 nd week-end entier de juillet, du samedi à 12:00 UTC
    au dimanche à 12:00 UTC.
Rien avoir avec cette date 06/07/2005 :P
Pour bande et mode je préfére les intégrés avec le champs texte de nom et date pour une recherche rapide et simple.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

06 juil. 2005, 10:28

Oui un seul champ texte comme google
je te conseille de séparer, comment vas-tu savoir que la recherche se fait sur la date ou le nom ?
j'avais oublié pour la date voici comment elle se présente :
  • 2 nd week-end entier de juillet, du samedi à 12:00 UTC
    au dimanche à 12:00 UTC.
Rien avoir avec cette date 06/07/2005 :P
effectivement ça va sérieusement compliquer les choses
on ne stocke pas une date dans un champ varchar, il y a tout un tas de fonctions de calculs dont tu te prives et cela prend plus de place
de plus, là tu a vraiment choisi un format original... je ne vois pas trop comment tu vas pouvoir faire une recherche simple là-dessus
Pour bande et mode je préfére les intégrés avec le champs texte de nom et date pour une recherche rapide et simple.
je ne comprend pas trop ce que tu veux dire là

Eléphant du PHP | 174 Messages

06 juil. 2005, 10:45

Justement pas besoin je veux faire une recherche
sur tous les champs en même temps

Exemple :
je tape phonie télégraphie dans mon champs texte
il doit m'afficher le nom des concours correspondant à ma requete ligne par ligne.
Autre Exemple :
je tape 80m dans mon champs texte
il doit m'afficher le nom des concours correspondant à ma requete ligne par ligne.

Pour la date je n'est pas le choix, car si j'utilise ce format 06/07/2005
je serais obligé de modifié la date tout les ans et ce n'est pas mon but.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

06 juil. 2005, 10:48

c'est un peu bizarre comme système de recherche... mais bon

alors tu récupères la variable de ton champ texte
et tu recherches dans tous les champs s'il y a quelque chose qui correspond

donc à utiliser a priori :
LIKE pour trouver les chaines qui contiennent le mot clé
OR pour chercher sur plusieurs champs, et garder la ligne si au moins un répond à la condition

mais je me permet d'insister tout de même, si tu as une table bande, qui liste toutes les bandes disponibles, tu ferais mieux de les proposer à l'utilisateur pour qu'il choisisse, sinon ça va sérieusement compliquer et alourdir ta recherche, voir en diminuer la pertinence

Eléphant du PHP | 174 Messages

06 juil. 2005, 11:31

J'ai séléctionné mes champs et mes tables avce cette commande

Code : Tout sélectionner

SELECT nom, date, bande, mode FROM concours, bandes, modes
Pour like je comprend son fonctionnement mais je ne sais pas l'utiliser.,
puis je l'utilisais à SELECT

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

06 juil. 2005, 11:33

si tu as une table "Personnes" avec un champ "nom"

si tu fais

Code : Tout sélectionner

SELECT nom FROM personne WHERE nom LIKE 'Du%'
ça te sortira "Dupont", "Dupond", "Durand"... tout ce qui commence par "Du"

donc (si 'cest ça la question finale) : oui tu peux l'utiliser dans un SELECT

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

06 juil. 2005, 11:36

et hop ! Sujet déplacé dans le bon forum !

Eléphant du PHP | 174 Messages

06 juil. 2005, 11:40

tout à fait

et que penses tu de cette commande :

Code : Tout sélectionner

SELECT nom, date, bande, mode FROM concours, bandes, modes WHERE nom, date, bande, mode LIKE '$motcle%'
$motcle = mot clé entré dans mon champs texte

mere-teresa vous pouriez tout de même indiquer le chemin du forum :P
je ne trouve plus mon post

je reprendrai la suite ce soir merci pour ton aide, j'espère devenir bon un jour, :wink: . Ce n'est pas pour maintenant :lol: .
Modifié en dernier par elminio le 06 juil. 2005, 11:57, modifié 1 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

06 juil. 2005, 11:48

si elle indique le chemin du forum dans ton post, comment tu ferais pour le voir su tu ne le retrouves plus :lol:

tu ne peux pas utiliser LIKE sur plusieurs champs à la fois
il faut que tu répètes ce LIKE pour chaque, et que tu utilises OR pour séparer les tests, afin qu'un seul de bon suffise pour sélectionner la ligne

et puis là, tu regardes dans la table bande si une ligne correspond à ton mot-clé, mais tu ne fais aucune jointure sur ta table "concours", via "concours_bande" donc tu n'auras pas les correspondances