Moteur de recherche interne en panne

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Moteur de recherche interne en panne

par pingoo » 08 oct. 2005, 12:07

Je vais revoir la structure de toutes mes tables et les modifier.
C'est sur toutes mes requêtes devront elles aussi êtres modifiées.
Merci pour ton aide. :D

par Cyrano » 08 oct. 2005, 10:22

En clair, toutes les données seraient en double ? Pour quoi faire ? Tu pourrais faire ça en solution transitoire pour transférer le contenu des tables abbérantes dans une nouvelles structure optimisée, mais pour que ça vaille la peine, il faudrait qu'ensuite tu vires les premières. Par contre ça implique que tu devras revoir toutes tes requêtes SQL :?

par pingoo » 08 oct. 2005, 10:14

Garder mes tables et en ajouter 4 avec l'incertion dans les deux groupes afin de creer des tables optimisées pour la recherche sur tout le site?

par Cyrano » 08 oct. 2005, 10:04

Tu penses à quoi au juste ?

par pingoo » 08 oct. 2005, 10:00

OK merci pour votre aide.
C'est sur que la structure de mes tables n'est pas super mais classées par rubrique c'est plus propre, maintenant question pratique c'est pas le top.
Et si je garde ma structure et ajoute les nouvelles tables avec une structure optimisé pour la recherche général du site?

par Cyrano » 08 oct. 2005, 09:15

Petite rectification : j'ai dit qu'avec deux table ça irait, en fait il en faudrait 4 à cause de quelques différences. Voici un schémà très rapidement évalué pour optimiser tout ça :

Code : Tout sélectionner

+--------------------------------------+ | vehicules | +--------------------+-----------+-----+ | veh_id |INT | PK | | veh_categorie |VARCHAR(16)| | | veh_marque |VARCHAR(32)| | | veh_modele |VARCHAR(32)| | +--------------------+-----------+-----+ +---------------------------------------+ | produits | +--------------------+------------+-----+ | pro_id |INT | PK | | pro_type_id |INT | FK | | pro_cat |VARCHAR(32) | | | pro_titre |VARCHAR(32) | | | pro_pseudom |VARCHAR(32) | | | pro_ville |VARCHAR(64) | | | pro_nomDestination1|VARCHAR(128)| | | pro_nomDestination2|VARCHAR(128)| | | pro_nomDestination3|VARCHAR(128)| | | pro_departement |VARCHAR(32) | | | pro_prix |DECIMAL(8,2)| | | pro_date |DATE | | | pro_description |TEXT | | +--------------------+------------+-----+ +--------------------------------------+ | type_produits | +--------------------+-----------+-----+ | type_pro_id |INT | PK | | type_pro_titre |VARCHAR(32)| | +--------------------+-----------+-----+ +----------------------------------------+ | emplois | +---------------------+------------+-----+ | emp_id |INT | PK | | emp_societe |VARCHAR(32) | | | emp_fonction |VARCHAR(32) | | | emp_pseudom |VARCHAR(32) | | | emp_adresse_societe |VARCHAR(32) | | | emp_ville |VARCHAR(128)| | | emp_nom_fichier |VARCHAR(32) | | | emp_lieu |VARCHAR(64) | | | emp_salaire |DECIMAL(9,2)| | | emp_date |DATE | | | emp_profil_recherche|TEXT | | +---------------------+------------+-----+
C'est bien sur très sommaire, mais avec ça, tu pourrais accélérer notablement tes recherches sans faire des requête de 20km ;)

par Cyrano » 08 oct. 2005, 08:26

Cette requête est incohérente: tu fais une recherches sur 19 tables, mais ta clause WHERE ne teste qu'un seul champ de la dernière table: quelles sont les clauses de tri sur les 18 autres tables ? :shock: :?:

Mais ce n'est pas le plus grave : ta requête montre une structure de base de données ahurissante: tu as 19 tables qui ont toutes le même schéma là où deux tables auraient suffi : En effet, toutes tes tables ont les mêmes champs, seul le nom de la table en rapport avec l'information qu'elle contient change.
Tu aurais donc pu avoir une table infos avec ces mêmes champs + un champ en clé étrangère, et une seconde table type_info qui listerait ces noms de tables avec deux champs: une clé primaire (qu'on retrouverait donc en clé étrangère dans l'autre) et le titre du type d'info.

De cette manière, ta requête serait limitée à deux tables et autrement plus efficace.

par Truc » 08 oct. 2005, 00:58

Salut je sait pas si on peut faire plus court mais plus long pour que ce soit juste peut etre :wink:

Tu met une clause WHERE que sur un champ d'un table:

Code : Tout sélectionner

where fk_vetements_accessoires.cat LIKE '%". $mots_cle ."%'
je pense que tu as listé toute la BD d'ou les 4158
tu pourrai ajouter les autres champs:

Code : Tout sélectionner

WHERE fk_vetements_accessoires.cat LIKE '%". $mots_cle ."%' AND fk_ameublement_electromenager.cat LIKE '%". $mots_cle ."%' AND fk_auto.cat LIKE '%". $mots_cle ."%' ....
Sinon pour alléger tu peut utilser des alias pour le tables, dans la clause FROM, par exemple:

Code : Tout sélectionner

FROM fk_ameublement_electromenager as fk1, fk_auto as fk2 ....
et donc tu aura quelque chose comme ça:

Code : Tout sélectionner

$select = "SELECT fk1.cat, fk1.titre, fk1.pseudom, fk1.ville, fk1.nomDestination1, fk1.nomDestination2, fk1.nomDestination3, fk1.departement, fk1.prix, fk1.id, DATE_FORMAT(fk1.date, '%d.%m.%y') date, SUBSTRING(fk1.description,1,200) AS description, fk2.marques, fk2.modele, fk2.pseudom, .... ...

Moteur de recherche interne en panne

par pingoo » 08 oct. 2005, 00:23

Bonjour, voila j'ais un moteur de recherche avec une grande requête mysql. Le problème et que le résultat n'est pas correct.
Lorsqu'il n'y a qu'un résultat cela m'en affiche 4158..
Voici m'a requête :

Code : Tout sélectionner

$select = "SELECT fk_ameublement_electromenager.cat, fk_ameublement_electromenager.titre, fk_ameublement_electromenager.pseudom, fk_ameublement_electromenager.ville, fk_ameublement_electromenager.nomDestination1, fk_ameublement_electromenager.nomDestination2, fk_ameublement_electromenager.nomDestination3, fk_ameublement_electromenager.departement, fk_ameublement_electromenager.prix, fk_ameublement_electromenager.id, DATE_FORMAT(fk_ameublement_electromenager.date, '%d.%m.%y') date, SUBSTRING(fk_ameublement_electromenager.description,1,200) AS description, fk_auto.marques, fk_auto.modele, fk_auto.pseudom, fk_auto.ville, fk_auto.nomDestination1, fk_auto.nomDestination2, fk_auto.nomDestination3, fk_auto.departement, fk_auto.prix, fk_auto.id_auto, DATE_FORMAT(fk_auto.date, '%d.%m.%y') date, SUBSTRING(fk_auto.description,1,200) AS description, fk_bateau.cat, fk_bateau.titre, fk_bateau.pseudom, fk_bateau.ville, fk_bateau.nomDestination1, fk_bateau.nomDestination2, fk_bateau.nomDestination3, fk_bateau.departement, fk_bateau.prix, fk_bateau.id, DATE_FORMAT(fk_bateau.date, '%d.%m.%y') date, SUBSTRING(fk_bateau.description,1,200) AS description, fk_divers.cat, fk_divers.titre, fk_divers.pseudom, fk_divers.ville, fk_divers.nomDestination1, fk_divers.nomDestination2, fk_divers.nomDestination3, fk_divers.departement, fk_divers.prix, fk_divers.id, DATE_FORMAT(fk_divers.date, '%d.%m.%y') date, SUBSTRING(fk_divers.description,1,200) AS description, fk_dvd_vhs_cinema.cat, fk_dvd_vhs_cinema.titre, fk_dvd_vhs_cinema.pseudom, fk_dvd_vhs_cinema.ville, fk_dvd_vhs_cinema.nomDestination1, fk_dvd_vhs_cinema.nomDestination2, fk_dvd_vhs_cinema.nomDestination3, fk_dvd_vhs_cinema.departement, fk_dvd_vhs_cinema.prix, fk_dvd_vhs_cinema.id, DATE_FORMAT(fk_dvd_vhs_cinema.date, '%d.%m.%y') date, SUBSTRING(fk_dvd_vhs_cinema.description,1,200) AS description, fk_immobilier.cat, fk_immobilier.titre, fk_immobilier.pseudom, fk_immobilier.ville, fk_immobilier.nomDestination1, fk_immobilier.nomDestination2, fk_immobilier.nomDestination3, fk_immobilier.departement, fk_immobilier.prix, fk_immobilier.id, DATE_FORMAT(fk_immobilier.date, '%d.%m.%y') date, SUBSTRING(fk_immobilier.description,1,200) AS description, fk_informatique_bureautique.cat, fk_informatique_bureautique.titre, fk_informatique_bureautique.pseudom, fk_informatique_bureautique.ville, fk_informatique_bureautique.nomDestination1, fk_informatique_bureautique.nomDestination2, fk_informatique_bureautique.nomDestination3, fk_informatique_bureautique.departement, fk_informatique_bureautique.prix, fk_informatique_bureautique.id, DATE_FORMAT(fk_informatique_bureautique.date, '%d.%m.%y') date, SUBSTRING(fk_informatique_bureautique.description,1,200) AS description, fk_instruments_musique.cat, fk_instruments_musique.titre, fk_instruments_musique.pseudom, fk_instruments_musique.ville, fk_instruments_musique.nomDestination1, fk_instruments_musique.nomDestination2, fk_instruments_musique.nomDestination3, fk_instruments_musique.departement, fk_instruments_musique.prix, fk_instruments_musique.id, DATE_FORMAT(fk_instruments_musique.date, '%d.%m.%y') date, SUBSTRING(fk_instruments_musique.description,1,200) AS description, fk_jeux_jouet_figurines.cat, fk_jeux_jouet_figurines.titre, fk_jeux_jouet_figurines.pseudom, fk_jeux_jouet_figurines.ville, fk_jeux_jouet_figurines.nomDestination1, fk_jeux_jouet_figurines.nomDestination2, fk_jeux_jouet_figurines.nomDestination3, fk_jeux_jouet_figurines.departement, fk_jeux_jouet_figurines.prix, DATE_FORMAT(fk_jeux_jouet_figurines.date, '%d.%m.%y') date, SUBSTRING(fk_jeux_jouet_figurines.description,1,200) AS description, fk_jeux_video_consoles.cat, fk_jeux_video_consoles.titre, fk_jeux_video_consoles.pseudom, fk_jeux_video_consoles.ville, fk_jeux_video_consoles.nomDestination1, fk_jeux_video_consoles.nomDestination2, fk_jeux_video_consoles.nomDestination3, fk_jeux_video_consoles.departement, fk_jeux_video_consoles.prix, fk_jeux_video_consoles.id, DATE_FORMAT(fk_jeux_video_consoles.date, '%d.%m.%y') date, SUBSTRING(fk_jeux_video_consoles.description,1,200) AS description, fk_livres_bd_revues.cat, fk_livres_bd_revues.titre, fk_livres_bd_revues.pseudom, fk_livres_bd_revues.ville, fk_livres_bd_revues.nomDestination1, fk_livres_bd_revues.nomDestination2, fk_livres_bd_revues.nomDestination3, fk_livres_bd_revues.departement, fk_livres_bd_revues.prix, fk_livres_bd_revues.id, DATE_FORMAT(fk_livres_bd_revues.date, '%d.%m.%y') date, SUBSTRING(fk_livres_bd_revues.description,1,200) AS description, fk_moto.marque, fk_moto.modele, fk_moto.pseudom, fk_moto.ville, fk_moto.nomDestination1, fk_moto.nomDestination2, fk_moto.nomDestination3, fk_moto.departement, fk_moto.prix, fk_moto.id, DATE_FORMAT(fk_moto.date, '%d.%m.%y') date, SUBSTRING(fk_moto.description,1,200) AS description, fk_offre_emploi.fonction, fk_offre_emploi.societe, fk_offre_emploi.pseudom, fk_offre_emploi.adresse_societe, fk_offre_emploi.nom_fichier, fk_offre_emploi.lieu, fk_offre_emploi.salaire, fk_offre_emploi.id, DATE_FORMAT(fk_offre_emploi.date, '%d.%m.%y') date, SUBSTRING(fk_offre_emploi.profil_rechercher,1,200) AS profil_rechercher, fk_outils_materiaux.cat, fk_outils_materiaux.titre, fk_outils_materiaux.pseudom, fk_outils_materiaux.ville, fk_outils_materiaux.nomDestination1, fk_outils_materiaux.nomDestination2, fk_outils_materiaux.nomDestination3, fk_outils_materiaux.departement, fk_outils_materiaux.prix, fk_outils_materiaux.id, DATE_FORMAT(fk_outils_materiaux.date, '%d.%m.%y') date, SUBSTRING(fk_outils_materiaux.description,1,200) AS description, fk_photo_video.cat, fk_photo_video.titre, fk_photo_video.pseudom, fk_photo_video.ville, fk_photo_video.nomDestination1, fk_photo_video.nomDestination2, fk_photo_video.nomDestination3, fk_photo_video.departement, fk_photo_video.prix, fk_photo_video.id, DATE_FORMAT(fk_photo_video.date, '%d.%m.%y') date, SUBSTRING(fk_photo_video.description,1,200) AS description, fk_sports_loisirs_vacances.cat, fk_sports_loisirs_vacances.titre, fk_sports_loisirs_vacances.pseudom, fk_sports_loisirs_vacances.ville, fk_sports_loisirs_vacances.nomDestination1, fk_sports_loisirs_vacances.nomDestination2, fk_sports_loisirs_vacances.nomDestination3, fk_sports_loisirs_vacances.departement, fk_sports_loisirs_vacances.prix, fk_sports_loisirs_vacances.id, DATE_FORMAT(fk_sports_loisirs_vacances.date, '%d.%m.%y') date, SUBSTRING(fk_sports_loisirs_vacances.description,1,200) AS description, fk_telephonie.cat, fk_telephonie.titre, fk_telephonie.pseudom, fk_telephonie.ville, fk_telephonie.nomDestination1, fk_telephonie.nomDestination2, fk_telephonie.nomDestination3, fk_telephonie.departement, fk_telephonie.prix, fk_telephonie.id, DATE_FORMAT(fk_telephonie.date, '%d.%m.%y') date, SUBSTRING(fk_telephonie.description,1,200) AS description, fk_tv_son_home_cinema.cat, fk_tv_son_home_cinema.titre, fk_tv_son_home_cinema.pseudom, fk_tv_son_home_cinema.ville, fk_tv_son_home_cinema.nomDestination1, fk_tv_son_home_cinema.nomDestination2, fk_tv_son_home_cinema.nomDestination3, fk_tv_son_home_cinema.departement, fk_tv_son_home_cinema.prix, fk_tv_son_home_cinema.id, DATE_FORMAT(fk_tv_son_home_cinema.date, '%d.%m.%y') date, SUBSTRING(fk_tv_son_home_cinema.description,1,200) AS description, fk_vetements_accessoires.cat, fk_vetements_accessoires.titre, fk_vetements_accessoires.pseudom, fk_vetements_accessoires.ville, fk_vetements_accessoires.nomDestination1, fk_vetements_accessoires.nomDestination2, fk_vetements_accessoires.nomDestination3, fk_vetements_accessoires.departement, fk_vetements_accessoires.prix, fk_vetements_accessoires.id, DATE_FORMAT(fk_vetements_accessoires.date, '%d.%m.%y') date, SUBSTRING(fk_vetements_accessoires.description,1,200) AS description FROM fk_ameublement_electromenager, fk_auto, fk_bateau, fk_divers, fk_dvd_vhs_cinema, fk_immobilier, fk_informatique_bureautique, fk_instruments_musique, fk_jeux_jouet_figurines, fk_jeux_video_consoles, fk_livres_bd_revues, fk_moto, fk_offre_emploi, fk_outils_materiaux, fk_photo_video, fk_sports_loisirs_vacances, fk_telephonie, fk_tv_son_home_cinema, fk_vetements_accessoires where fk_vetements_accessoires.cat LIKE '%". $mots_cle ."%' ";
Si on pouvait faire plus court..
Merci pour votre aide