IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres composants PHP Discussion :

base de données pour un moteur de recherche


Sujet :

Autres composants PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 20
    Par défaut base de données pour un moteur de recherche
    Bonjour,
    je suis entrain de développer un simple moteur de recherche des formations en php et MySQL. le principe c'est de récupérer mes données depuis une grande base de données et de les stoker dans la base propre à mon moteur de recherche qui contient ces tables (keywords, training,keywords_has_training), la table keywors contient un idkeywords et un seul mot clé et la table training représente des formations et la table keywords_has_training est une table associative qui associé à chaque formations de mots clés.
    Mon problème c'est que lors de la recherche mon moteur m'affiche les même résultats plusieurs fois...
    Pourquoi? de se qui me semble c'est que à chaque fois ma requete retourne les meme informations mais avec un mot clé différent.
    est ce qu'il y a une autre manière de représenter les mots clés (par exemple un ensemble séparer par des points virgules ...etc)
    merci d'avance pour votre aide

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    est ce qu'il y a une autre manière de représenter les mots clés (par exemple un ensemble séparer par des points virgules ...etc)
    Surtout pas !
    Ton modèle de données est bon.

    Mon problème c'est que lors de la recherche mon moteur m'affiche les même résultats plusieurs fois...
    Il manque peut-être un DISTINCT dans ta requête ?

    Comme tu ne la montres pas, difficile de la deviner !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 20
    Par défaut
    Merci pour ta réponse,
    j'ai déjà essayé de mettre distinct mes le résultat et le même à chaque fois !!
    voilà ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT `training`.*, `kht`.*, `k`.* 
    FROM `training`  
    INNER JOIN `keywords_has_training` AS `kht` ON training.idtraining = kht.training_id  
    INNER JOIN `keywords` AS `k` ON k.idkeywords = kht.keywords_id WHERE (public= 1 ) 
    ORDER BY `recommendation` DESC
    cette requête est générer automatiquement parce que je travail avec zend framework

    voilà la requête de base en objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $training_table = new Application_Model_DbTable_Training();
    		$select = $training_table->select(Zend_Db_Table::SELECT_WITH_FROM_PART);
    		$select->setIntegrityCheck(false)
    				->distinct('t.idtraining')
    				->join(array('kht'=>'keywords_has_training'), 'training.idtraining = kht.training_id')
    				->join(array('k'=>'keywords'), 'k.idkeywords = kht.keywords_id')
    		 		->where("public= ? ",1)
    		 		->order("recommendation DESC");
    merci

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    DISTINCT opère sur toutes les colonnes du SELECT.

    Comme tu t'es lancé dans la guerre des étoiles, tu as récupéré plein de débris en multiples exemplaires !

    C'est comme si tu n'avais pas fait de DISTINCT puisque toutes les lignes sont différentes.

    Quant à Zend_Framework, tu peux très bien rédiger tes requêtes en SQL pur et les lui faire exécuter. Pas besoin de passer par cette syntaxe inutilement compliquée qui masque les vrais requêtes générées, pas toujours de manière optimisées.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 20
    Par défaut
    normalement on a le droit de mettre un seul distinct dans une close select sinon y 'aura des erreurs de syntaxe !

    j'ai essayé d'exécuter cette requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT(t.idtraining),DISTINCT(t.label), DISTINCT(t.description)
    FROM `training` AS t  INNER JOIN `keywords_has_training` AS `kht` ON t.idtraining = kht.training_id  
    INNER JOIN `keywords` AS `k` ON k.idkeywords = kht.keywords_id WHERE (public= 1 ) 
    ORDER BY `recommendation` DESC
    mais j'ai cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #1064 - 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 'DISTINCT(t.label), DISTINCT(t.description) FROM `training` AS t
    INNER JOIN `key' at line 1
    je sais pas si y a un moyen de faire des distincts sur toutes les colonnes depuis zend?

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Encore une fois, DISTINCT opère sur toutes les colonnes de la ligne donc, effectivement, il ne peut y avoir qu'un seul DISTINCT dans un SELECT (sauf dans plusieurs COUNT(DISTINCT...) mais c'est une autre utilisation).

    Si tu veux faire un DISTINCT sur seulement certaines colonnes et pas sur toutes celles que tu veux récupérer, il faut faire une sous-requête et spécifier les conditions qui feront choisir les données à récupérer.

    Et encore une fois, écrit ta requête en SQL natif, teste là puis fais là exécuter directement pas Zend_Db. C'est beaucoup plus simple que leur syntaxe d'ORM à la con !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche bases de données pour analyses
    Par lamyass dans le forum SAS STAT
    Réponses: 3
    Dernier message: 23/02/2011, 16h29
  2. [MySQL] Base de données : stratégie à adopter pour un moteur de recherche
    Par yohan0262 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 04/06/2007, 12h35
  3. Réponses: 5
    Dernier message: 09/02/2007, 10h09
  4. Un moteur de base de données pour un application
    Par sirius1974 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 18/06/2005, 14h52
  5. comment faire ma base de donnée pour un moteur de recherche
    Par HoB dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 04/05/2004, 16h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo